具有多行布局的列表视图

Listview with multiple row layout

您好,下面是我的 class 基础适配器,但它无法正常工作!!

我尝试使用多行的ListView,我不明白我哪里错了 第一个布局仅包含 textView,第二个包含 textview 和 imageView

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 ;

}}

我有一个错误

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

添加时:

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

"THAM " 值不是资源 ID,因此您将在 img.setImageResource(item.getImgId());

上获得 NullPointerException

使用:

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());

    }