2016-03-28 124 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);  
} 

等等...