Java Android ListAdapter显示正确,但随后给出空指针。为什么?

Java Android ListAdapter显示正确,但随后给出空指针。为什么?,java,android,nullpointerexception,listadapter,Java,Android,Nullpointerexception,Listadapter,我正在尝试在我的Android应用程序中构建一个简单的listadapter。我让它正确显示项目列表,但奇怪的是,列表显示后,我得到一个空指针,应用程序崩溃。看到适配器相当简单,我不知道我在这里做错了什么 在我的适配器下面。null指针出现在getView方法中的holder.points.setText(“123”)行中 公共类QuestionAdapter扩展了BaseAdapter{ 私有列表数据=新的ArrayList(); 私人语境; 公共问题适配器(上下文){ this.contex

我正在尝试在我的Android应用程序中构建一个简单的listadapter。我让它正确显示项目列表,但奇怪的是,列表显示后,我得到一个空指针,应用程序崩溃。看到适配器相当简单,我不知道我在这里做错了什么

在我的适配器下面。null指针出现在getView方法中的
holder.points.setText(“123”)行中

公共类QuestionAdapter扩展了BaseAdapter{
私有列表数据=新的ArrayList();
私人语境;
公共问题适配器(上下文){
this.context=上下文;
}
@凌驾
public int getCount(){
返回data.size();
}
私有类视窗持有者{
文本观点;
文本视图标题;
}
公共无效集合列表(列表问题列表){
this.data=问题列表;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组视图组){
问题=获取项目(位置);
ViewHolder=新的ViewHolder();
if(convertView==null){
convertView=LayoutFlater.from(上下文)。充气(R.layout.list\u item\u question,空);
holder.points=(TextView)convertView.findViewById(R.id.text\u question\u points);
holder.title=(TextView)convertView.findViewById(R.id.text\u question\u title);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.points.setText(“123”);
holder.title.setText(问题.标题);
返回视图;
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共问题获取项目(int i){
返回数据。获取(i);
}
}
你忘了

convertView.setTag(holder);
这里

这就是为什么我们第二次使用此convertView时,convertView!=空
holder
在此行中为空
holder=(ViewHolder)convertView.getTag()

编辑 也就是说,虽然我不是调试器。

你忘了

convertView.setTag(holder);
这里

这就是为什么我们第二次使用此convertView时,convertView!=空
holder
在此行中为空
holder=(ViewHolder)convertView.getTag()

编辑 也就是说,虽然我不是调试器。

你忘了

convertView.setTag(holder);
这里

这就是为什么我们第二次使用此convertView时,convertView!=空
holder
在此行中为空
holder=(ViewHolder)convertView.getTag()

编辑 也就是说,虽然我不是调试器。

你忘了

convertView.setTag(holder);
这里

这就是为什么我们第二次使用此convertView时,convertView!=空
holder
在此行中为空
holder=(ViewHolder)convertView.getTag()

编辑
也就是说,尽管我不是调试器。

您没有在任何地方执行
convertView.setTag(holder)

所以当你这样做的时候

 holder = (ViewHolder) convertView.getTag();

holder
将为空,它将给您一个
NullPointerException
您没有在任何地方执行
convertView.setTag(holder)

public class QuestionAdapter extends BaseAdapter {

    private List<Question> data = new ArrayList<Question>();
    private Context context;

    public QuestionAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    private class ViewHolder {
        TextView points;
        TextView title;
    }

    public void setList(List<Question> questionList) {
        this.data = questionList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        Question question = getItem(position);

        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item_question, null);
            holder.points = (TextView) convertView.findViewById(R.id.text_question_points);
            holder.title = (TextView) convertView.findViewById(R.id.text_question_title);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.points.setText("123");
        holder.title.setText(question.title);

        return convertView;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public Question getItem(int i) {
        return data.get(i);
    }
}
所以当你这样做的时候

 holder = (ViewHolder) convertView.getTag();

holder
将为空,它将给您一个
NullPointerException
您没有在任何地方执行
convertView.setTag(holder)

public class QuestionAdapter extends BaseAdapter {

    private List<Question> data = new ArrayList<Question>();
    private Context context;

    public QuestionAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    private class ViewHolder {
        TextView points;
        TextView title;
    }

    public void setList(List<Question> questionList) {
        this.data = questionList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        Question question = getItem(position);

        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item_question, null);
            holder.points = (TextView) convertView.findViewById(R.id.text_question_points);
            holder.title = (TextView) convertView.findViewById(R.id.text_question_title);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.points.setText("123");
        holder.title.setText(question.title);

        return convertView;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public Question getItem(int i) {
        return data.get(i);
    }
}
所以当你这样做的时候

 holder = (ViewHolder) convertView.getTag();

holder
将为空,它将给您一个
NullPointerException
您没有在任何地方执行
convertView.setTag(holder)

public class QuestionAdapter extends BaseAdapter {

    private List<Question> data = new ArrayList<Question>();
    private Context context;

    public QuestionAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    private class ViewHolder {
        TextView points;
        TextView title;
    }

    public void setList(List<Question> questionList) {
        this.data = questionList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        Question question = getItem(position);

        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item_question, null);
            holder.points = (TextView) convertView.findViewById(R.id.text_question_points);
            holder.title = (TextView) convertView.findViewById(R.id.text_question_title);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.points.setText("123");
        holder.title.setText(question.title);

        return convertView;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public Question getItem(int i) {
        return data.get(i);
    }
}
所以当你这样做的时候

 holder = (ViewHolder) convertView.getTag();
holder
将为null,它将为您提供一个
NullPointerException

公共类QuestionAdapter扩展BaseAdapter{
public class QuestionAdapter extends BaseAdapter {

    private List<Question> data = new ArrayList<Question>();
    private Context context;

    public QuestionAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    private class ViewHolder {
        TextView points;
        TextView title;
    }

    public void setList(List<Question> questionList) {
        this.data = questionList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        Question question = getItem(position);

        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item_question, null);
            holder.points = (TextView) convertView.findViewById(R.id.text_question_points);
            holder.title = (TextView) convertView.findViewById(R.id.text_question_title);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.points.setText("123");
        holder.title.setText(question.title);

        return convertView;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public Question getItem(int i) {
        return data.get(i);
    }
}
私有列表数据=新的ArrayList(); 私人语境; 公共问题适配器(上下文){ this.context=上下文; } @凌驾 public int getCount(){ 返回data.size(); } 私有类视窗持有者{ 文本观点; 文本视图标题; } 公共无效集合列表(列表问题列表){ this.data=问题列表; } @凌驾 公共视图getView(int位置、视图转换视图、视图组视图组){ 问题=获取项目(位置); ViewHolder=null; if(convertView==null){ holder=新的ViewHolder(); convertView=LayoutFlater.from(上下文)。充气(R.layout.list\u item\u question,空); holder.points=(TextView)convertView.findViewById(R.id.text\u question\u points); holder.title=(TextView)convertView.findViewById(R.id.text\u question\u title); }否则{ holder=(ViewHolder)convertView.getTag(); } holder.points.setText(“123”); holder.title.setText(问题.标题); 返回视图; } @凌驾 公共长getItemId(int i){ 返回0; } @凌驾 公共问题获取项目(int i){ 返回数据。获取(i); } }
公共类QuestionAdapter扩展了BaseAdapter{
私有列表数据=新的ArrayList();
私人语境;
公共问题适配器(上下文){
this.context=上下文;
}
@凌驾
public int getCount(){
返回data.size();
}
私有类视窗持有者{
文本观点;
文本视图标题;
}
公共无效集合列表(列表问题列表){
this.data=问题列表;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组视图组){
问题=获取项目(位置);
ViewHolder=null;
if(convertView==null){
holder=新的ViewHolder();
convertView=LayoutFlater.from(上下文)。充气(R.layout.list\u item\u question,空);
holder.points=(TextView)convertView.findViewById(R.id.text\u question\u points