我正在为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));
我哪里错了?
答案 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;
}