arrayadapter-viewholder空指针错误

46scxncf  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(331)

我以为我已经掌握了如何使用viewholders,但现在运行这个程序时出现了一个空指针异常。它发生在我试图为itemtitleview设置文本时,但我不太明白我缺少了什么。我有三个布局使用不同的背景颜色,并试图使用每一个取决于listviewitemtype的特定元素的arraylist。我有一个谷歌,但它是没有任何明确的我,任何帮助将不胜感激。
positemAdapter.java文件

public class PostItemAdapter extends ArrayAdapter<Item>
{
    private LayoutInflater inflater;
    private ArrayList<Item> datas;
    public static final int TYPE_short = 0;
    public static final int TYPE_med = 1;
    public static final int TYPE_long = 2;

    public PostItemAdapter(Context context, int textViewResourceId, ArrayList<Item> objects)
    {
        super(context, textViewResourceId, objects);

        inflater = ((Activity) context).getLayoutInflater();
        datas = objects;
    }

    //class to hold view object references
    static class ViewHolder
    {
        TextView itemTitleView;
        TextView itemTitleView1;
        TextView itemTitleView2;
        ImageView itemThumbView;
    }

    @Override
    public int getItemViewType(int position) {
        return datas.get(position).viewtype;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder viewHolder;
        int listViewItemType = getItemViewType(position);

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.postitem, null);

            viewHolder = new ViewHolder();
            viewHolder.itemThumbView = (ImageView) convertView.findViewById(R.id.itemThumb);

            if (listViewItemType == TYPE_short) {
                viewHolder.itemTitleView = (TextView) convertView.findViewById(R.id.itemTitleLabel);
            } else if (listViewItemType == TYPE_med) {
                viewHolder.itemTitleView1 = (TextView) convertView.findViewById(R.id.itemTitleLabel1);
            } else if (listViewItemType == TYPE_long) {
                viewHolder.itemTitleView2 = (TextView) convertView.findViewById(R.id.itemTitleLabel2);
            }
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if (datas.get(position).itemThumbUrl == null)
        {
            viewHolder.itemThumbView.setImageResource(R.drawable.test);
        }

        viewHolder.itemTitleView.setText(datas.get(position).itemTitle);
        viewHolder.itemTitleView1.setText(datas.get(position).itemTitle);
        viewHolder.itemTitleView2.setText(datas.get(position).itemTitle);

        return convertView;
    }
}
4dbbbstv

4dbbbstv1#

你需要加上 if else 将标题设置为时的语句 TextView . 作为 viewHolder.itemTitleViewnull 如果 listViewItemType 不等于 TYPE_short .

if (listViewItemType == TYPE_short) {
  viewHolder.itemTitleView.setText(datas.get(position).itemTitle);      
} else if (listViewItemType == TYPE_med) {
  viewHolder.itemTitleView1.setText(datas.get(position).itemTitle);      
} else if (listViewItemType == TYPE_long) {
  viewHolder.itemTitleView2.setText(datas.get(position).itemTitle);      
}
tjvv9vkg

tjvv9vkg2#

你的 NullPointer exception 来是因为你想 itemTitleView , itemTitleView1 以及 itemTitleView2 其中只有一个是初始化。您必须将if-else语句设置为与初始化变量时相同的值,但在将数据设置为 textViews .

if (listViewItemType == TYPE_short) {
  viewHolder.itemTitleView.setText(datas.get(position).itemTitle);      
}

等等。。。

相关问题