2016-03-28 117 views
0

我想我已经掌握了如何使用ViewHolders,但是我现在在运行时得到一个空指针异常。当我尝试为itemTitleView设置文本时,会发生这种情况,并且我不完全明白我错过了什么。我有三种布局使用不同的背景颜色,我试图根据ArrayList的特定元素的listViewItemType来使用它们。我有一个谷歌,但它不是更清晰,任何帮助,将不胜感激。ArrayAdapter - ViewHolder空指针错误

PostItemAdapter.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; 
    } 
} 

回答

1

您需要添加if else声明,同时设置标题TextView。如果listViewItemType不等于TYPE_short,则viewHolder.itemTitleView将为null

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);  
} 
1

NullPointer exception来,因为你想得瑟itemTitleViewitemTitleView1itemTitleView2而其中只有一个是初始化。您必须放置一个if else语句,与初始化变量时相同,但当您将数据设置为textViews时。

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

等等...