2016-05-27 4 views
2

こんにちは、baseadapterのための私のクラスですが、それは動作していません! 複数行レイアウトのリストビュー

public class CustomAdapter extends BaseAdapter { 

public static final int TYPE_ODD = 0; 
public static final int TYPE_EVEN = 1; 




private Context context; 
private List<ItemSlideMenu> lstItem; 
@Override 
public int getViewTypeCount() { 
    return 2; 
} 

@Override 
public int getItemViewType(int position) { 
    return lstItem.get(position).getType(); 
} 


public CustomAdapter(Context context, List<ItemSlideMenu> lstItem) { 
    this.context = context; 
    this.lstItem = lstItem; 
} 

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

@Override 
public Object getItem(int position) { 
    return lstItem.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    int listViewItemType = getItemViewType(position); 

    if (convertView == null) { 

     if (listViewItemType == TYPE_EVEN) { 
      convertView = View.inflate(context, R.layout.item_sliding_menu, null); 
      ImageView img = (ImageView) convertView.findViewById(R.id.item_img); 
      TextView tv = (TextView) convertView.findViewById(R.id.item_title); 

      ItemSlideMenu item = lstItem.get(position); 
      img.setImageResource(item.getImgId()); 
      tv.setText(item.getTitle()); 

     } 

     else if (listViewItemType == TYPE_ODD) { 
      convertView = View.inflate(context, R.layout.reseaux, null); 
      ImageView img = (ImageView) convertView.findViewById(R.id.item_img); 
      TextView tv = (TextView) convertView.findViewById(R.id.item_title); 

      ItemSlideMenu item = lstItem.get(position); 
      img.setImageResource(item.getImgId()); 
      tv.setText(item.getTitle()); 

     } 


    } 

return convertView ; 

}} 

ImageViewの

私は 最初のレイアウトはちょうどのTextViewを含んで間違っていたと第2のTextViewとを含んでいる場合

iは、複数の行でリストビューを使用しようと、私は私がエラーを持って理解していなかった

05-27 16:05:45.297 25537-25537/com.example.getgpslocation E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.getgpslocation, PID: 25537 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference 

Fragment3.java

listSliding3 = new ArrayList<>(); 
    //Add item for sliding list 
    listSliding3.add(new ItemSlideMenu("TRAM " , CustomAdapter.TYPE_ODD)); 
    listSliding3.add(new ItemSlideMenu(R.drawable.ic_action_about,"Ligne1",CustomAdapter.TYPE_EVEN)); 
    listSliding3.add(new ItemSlideMenu(R.drawable.ic_action_about,"Ligne2",CustomAdapter.TYPE_EVEN)); 
    listSliding3.add(new ItemSlideMenu("BUS " , CustomAdapter.TYPE_ODD)); 


    CustomAdapter customAdapter = new CustomAdapter(getActivity(),listSliding3); 
    listViewSliding3.setAdapter(customAdapter); 
+0

代わりに 'convertView = View.inflate(context、R.layout.item_sliding_menu、null ); '奇数インスタンスと偶数インスタンスの両方でconvertView = layoutInflater.inflate(R.layout.yourLayout、parent、false)を使用します。あなたがlayoutInflaterを取得する方法を知っていることを願っています。 –

答えて

0

W編追加:

listSliding3.add(new ItemSlideMenu("TRAM " , CustomAdapter.TYPE_ODD)); 

"THAM "値はリソースIDではありません、あなたはNullPointerException

img.setImageResource(item.getImgId());の使用なりますので:

listSliding3.add(new ItemSlideMenu("", "TRAM ", CustomAdapter. TYPE_ODD)); 

とアダプタで

が設定されていない画像:

else if (listViewItemType == TYPE_ODD) { 
     convertView = View.inflate(context, R.layout.reseaux, null); 
     ImageView img = (ImageView) convertView.findViewById(R.id.item_img); 
     TextView tv = (TextView) convertView.findViewById(R.id.item_title); 

     ItemSlideMenu item = lstItem.get(position); 
     tv.setText(item.getTitle()); 

    } 
+0

public ItemSlideMenu(String title、int type){this.title = title; ありがとうございました:) – CamlX

+0

画像がすでにある場合は、それを削除するために 'img.setImageDrawable(null);'を使用することができます。それはあなたが意味することですか? - @AbbesChouokchou –

関連する問題