自定义适配器的getView()中的空指针异常

时间:2012-08-03 08:32:52

标签: android nullpointerexception custom-adapter

我正在为ListView使用此自定义适配器:

public class SideMenuAdapter extends BaseAdapter {

    private static final int TYPE_MAX_COUNT = 2;
    private static LayoutInflater inflater = null;
    private Activity activity;
    public static String[] values;
    ListView myList;

    public SideMenuAdapter(Activity a, String[] sa, ListView lv) {

        values = sa;
        activity = a;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        myList = lv;
    }

    public int getCount() {

        return values.length;
    }

    public Object getItem(int position) {

        return position;
    }

    public long getItemId(int position) {

        return position;
    }

    public static class ViewHolder {

        public TextView mainText;
        public TextView sideText;
    }

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

        ViewHolder holder = new ViewHolder();
        View vi = convertView;
        if (vi == null) {

            //here i am getting NullPointerException
            vi.setTag(holder);
        } else {

            holder = (ViewHolder) vi.getTag();
        }
        vi = inflater.inflate(R.layout.side_menu_list_item, null);
        holder.mainText = (TextView) vi.findViewById(R.id.mainText_sideMenu);
        holder.sideText = (TextView) vi.findViewById(R.id.sideText_sideMenu);
        holder.mainText.setText(values[position]);
        if(position == 2){

            holder.sideText.setText("3");
            holder.sideText.setBackgroundResource(R.drawable.orange);
        }
        return convertView;
    }
    @Override
    public int getViewTypeCount() {

        return TYPE_MAX_COUNT;
    }
}

我正在以这种方式将适配器设置到我的列表视图:

    String menuItems[] = new String[] { "My Wants", "Profile", "Notifications",
            "Feedback", "Logout" };
    listView1.setAdapter(new SideMenuAdapter(this, menuItems, listView1));

我哪里错了?

2 个答案:

答案 0 :(得分:3)

您应该在vi

之前初始化vi.setTag(holder);

答案 1 :(得分:3)

试试这个,可能对你有所帮助......

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

    ViewHolder holder = new ViewHolder();
    View vi = convertView;
    if (vi == null) {
        LayoutInflater inflater = ((Activity)activity).getLayoutInflater();
        vi = inflater.inflate(R.layout.side_menu_list_item, null);
        holder.mainText = (TextView) vi.findViewById(R.id.mainText_sideMenu);
        holder.sideText = (TextView) vi.findViewById(R.id.sideText_sideMenu);
        vi.setTag(holder);
    } else {

        holder = (ViewHolder) vi.getTag();
    }

    holder.mainText.setText(values[position]);
    if(position == 2){

        holder.sideText.setText("3");
        holder.sideText.setBackgroundResource(R.drawable.orange);
    }
    return convertView;
}