Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java view.setTag(objectobj)抛出nullpointerexception_Java_Android_Android Studio - Fatal编程技术网

Java view.setTag(objectobj)抛出nullpointerexception

Java view.setTag(objectobj)抛出nullpointerexception,java,android,android-studio,Java,Android,Android Studio,我正在尝试创建一个具有listview和arrayadapter的应用程序。 我有一个自定义类(Word)和一个自定义适配器(WordAdapter)。 通过运行此代码,应用程序将崩溃 这是错误: java.lang.NullPointerException:尝试调用虚拟方法“void” 空对象引用上的android.view.view.setTag(java.lang.Object)“” 代码如下: import android.content.Context; import android.

我正在尝试创建一个具有listview和arrayadapter的应用程序。 我有一个自定义类(Word)和一个自定义适配器(WordAdapter)。 通过运行此代码,应用程序将崩溃 这是错误:

java.lang.NullPointerException:尝试调用虚拟方法“void” 空对象引用上的android.view.view.setTag(java.lang.Object)“”

代码如下:

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class WordAdapter extends ArrayAdapter<Word> {

    //datastructure to hold two textviews, so that it can be reused rather than instantiating
    static class ViewHolder {
        TextView textView1;
        TextView textView2;
    }

    //sets up the arrayadapter
    //@param context : specify the context (e.g current activity)
    //@param words : list of words to populate the view (contains objects of custom word class)
    public WordAdapter(@NonNull Context context, @NonNull ArrayList<Word> words) {
        super(context, 0, words);
    }

    /*
    Needs to override when using custom arrayadapater.
    Called by the adapter class when populating data from data source into the view
    @param position : position of the data in the data source
    @param convertView : data from source is set as the data for this view
    @param parent : parent view to which convertview gets attached
     */
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder viewHolder;

        View list_item_view = convertView;

        //checks if any reusable view is available
        //list_item_view = null if no reusable view is available
        if (list_item_view == null) {
            viewHolder = new ViewHolder();

            //convert the custom layout file into view object and inflate the parent with the view
            //returns the root of the custom layout file (if attachToRoot = false)
            //returns parent view to which the layout is to be attached (if attachToRoot = true)
            list_item_view = LayoutInflater.from(getContext())
                    .inflate(R.layout.list_item, parent, false);

            viewHolder.textView1 = (TextView) list_item_view.findViewById(R.id.miwok_text_view);
            viewHolder.textView2 = (TextView) list_item_view.findViewById(R.id.default_text_view);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //get the data from the position
        Word word = getItem(position);

        //set the miwok word
        viewHolder.textView1.setText(word.getMiwokWord());

        //set the default word
        viewHolder.textView2.setText(word.getDefaultWord());

        //retrun the view to which data is to be placed
        return list_item_view;
    }

}
导入android.content.Context;
导入android.support.annotation.NonNull;
导入android.support.annotation.Nullable;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类WordAdapter扩展了ArrayAdapter{
//datastructure来保存两个TextView,这样就可以重用它,而不是实例化它
静态类视窗夹{
文本视图文本视图1;
文本视图文本视图2;
}
//设置arrayadapter
//@参数上下文:指定上下文(例如当前活动)
//@param words:填充视图的单词列表(包含自定义单词类的对象)
公共字适配器(@NonNull上下文,@NonNull数组列表字){
超级(上下文,0,单词);
}
/*
使用自定义ArrayAdapter时需要重写。
将数据从数据源填充到视图时由适配器类调用
@参数位置:数据在数据源中的位置
@param convertView:源数据被设置为此视图的数据
@param parent:convertview附加到的父视图
*/
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
持票人持票人;
视图列表\项目\视图=转换视图;
//检查是否有任何可重用视图可用
//如果没有可用的可重用视图,则list\u item\u view=null
if(列表项视图==null){
viewHolder=新的viewHolder();
//将自定义布局文件转换为视图对象,并使用视图对父级进行充气
//返回自定义布局文件的根目录(如果attachToRoot=false)
//返回布局要附加到的父视图(如果attachToRoot=true)
list\u item\u view=LayoutInflater.from(getContext())
.充气(R.layout.list_项,父项,假);
viewHolder.textView1=(TextView)列表项视图.findViewById(R.id.miwok\u文本视图);
viewHolder.textView2=(TextView)列表项视图.findViewById(R.id.default\u文本视图);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
//从位置获取数据
Word=getItem(位置);
//设置miwok单词
viewHolder.textView1.setText(word.getMiwokWord());
//设置默认单词
viewHolder.textView2.setText(word.getDefaultWord());
//重新运行要放置数据的视图
返回列表\项目\视图;
}
}

任何人请帮助。

您应该更改以下行:

 list_item_view .setTag(viewHolder);

 viewHolder = (ViewHolder) list_item_view .getTag();

删除
list\u item\u视图
并仅使用
convertView
。谢谢@SandipSoni它成功了