我希望任何人都可以帮助我,因为我现在完全失去了。Android。与自定义列表视图中的适配器相关的错误
我做了这个自定义适配器,从给定列表填充列表视图。
问题出在减号&加上按钮。他们都有听众修改textview在1计数取决于哪一个被按下,它也修改源列表。
这是一张图片PIC ilishrate最后的看法。
如果从第一行开始每按一个按钮首先按下按钮,则可以使用其余的缺省问题。但是,如果按下的是其他按钮之一,则应用程序会崩溃。
给出的错误是试图添加+ 1或删除-1的原始名单上的特定列表项时,一个NullPointerException异常。
如果需要更多内容,请询问。感谢您的关注。
公共类MenuListAdapter延伸BaseAdapter {
private Context mContext;
private int mLayoutResourceId;
public MenuListAdapter(Context context, int textViewResourceId) {
mContext = context;
mLayoutResourceId = textViewResourceId;
}
public int getCount() {
return SavedMenuList.INSTANCE.size();
}
public MenuListItem getItem(int position) {
return SavedMenuList.INSTANCE.getItem(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(mLayoutResourceId, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.checkBox = (CheckBox) rowView.findViewById(R.id.confirmation_list_row_check);
viewHolder.text = (TextView) rowView.findViewById(R.id.confirmation_list_row_name);
viewHolder.minus = (ImageButton) rowView.findViewById(R.id.confirmation_list_row_remove_button);
viewHolder.minus.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MenuListItem item = (MenuListItem) viewHolder.minus.getTag();
SavedMenuList.INSTANCE.removeOneItemCount(item);
notifyDataSetChanged();
}
});
viewHolder.count = (TextView) rowView.findViewById(R.id.confirmation_list_row_count);
viewHolder.plus = (ImageButton) rowView.findViewById(R.id.confirmation_list_row_add_button);
viewHolder.plus.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MenuListItem item = (MenuListItem) viewHolder.plus.getTag();
SavedMenuList.INSTANCE.addOneItemCount(item);
notifyDataSetChanged();
}
});
viewHolder.itemid = (TextView) rowView.findViewById(R.id.confirmation_list_row_itemid);
viewHolder.typeid = (TextView) rowView.findViewById(R.id.confirmation_list_row_typeid);
rowView.setTag(viewHolder);
}else{
rowView = convertView;
((ViewHolder) rowView.getTag()).checkBox.setTag(getItem(position));
((ViewHolder) rowView.getTag()).minus.setTag(getItem(position));
((ViewHolder) rowView.getTag()).plus.setTag(getItem(position));
}
ViewHolder holder = (ViewHolder) rowView.getTag();
MenuListItem item = getItem(position);
holder.text.setText(item.getmItemName() + " (" + item.getmItemTypeName() + ")");
holder.count.setText(String.valueOf(item.getmItemCount()));
holder.typeid.setText(String.valueOf(item.getmItemId()));
holder.typeid.setText(String.valueOf(item.getmItemTypeId()));
return rowView;
}
static class ViewHolder {
public CheckBox checkBox;
public TextView text;
public ImageButton minus;
public TextView count;
public ImageButton plus;
public TextView itemid;
public TextView typeid;
}
}
这是错误:
二月4日至22日:54:22.398:E/AndroidRuntime(7112):在GIORGI .betaproject.utils.SavedMenuList.addOneItemCount(SavedMenuList.java:34)
public enum SavedMenuList {
INSTANCE;
List <MenuListItem> mList = new ArrayList<MenuListItem>();
...
public boolean addOneItemCount(MenuListItem item) {
for (MenuListItem mItem: mList){
if (item.equals(mItem)){
mItem.addOneItemCount();
return true;
}
}
return false;
}
...
}
嗯,它已经解决了。 谁能告诉我,为什么它的工作原理与此: '如果(mItem.equals(项))',而不是与 '如果(item.equals(MITEM))'????? – giorgiline 2012-04-22 02:10:34
改变'如果(item.equals(MITEM))''来,如果(mItem.equals(项))'不解决您的问题,它只是隐藏您的问题。 'if(mItem.equals(item))'就像'mItem.equals(null)'一样,它总是返回** false **,显然不是你想要的。答案中提供了解决方案。 – neevek 2012-04-22 10:28:22