包含多行布局的Listview

时间:2016-05-27 15:14:32

标签: android listview android-imageview baseadapter

嗨,下面是我的baseadapter课程,但它不起作用!!

我尝试使用带有多个Row的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);

1 个答案:

答案 0 :(得分:0)

添加时:

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

    }