2016-03-28 13 views
0

ViewHoldersの使い方を理解していると思っていましたが、これを実行する際にnullポインタ例外が発生します。これは、itemTitleViewのいずれかのテキストを設定しようとしたときに発生し、私は何が欠けているのかよく分かりません。私は異なる背景色を使用して3つのレイアウトがあり、ArrayListの特定の要素のlistViewItemTypeに応じてそれぞれを使用しようとしています。私はGoogleを持っていたが、それは私には明らかではない、どんな助けも高く評価されるだろう。ArrayAdapter - ViewHolder nullポインタエラー

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

あなたはTextViewにタイトルを設定しながらif elseステートメントを追加する必要があります。 viewHolder.itemTitleViewnullの場合、listViewItemTypeTYPE_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);  
} 
1

あなたNullPointer exceptionは、あなたがSE itemTitleViewitemTitleView1itemTitleView2にしたいので来て、片方のみの初期化です。変数を初期化するときと同じようにif elseステートメントを置く必要があります。ただし、データをtextViewsに設定したときは、そうでなければなりません。

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

のように...

関連する問題