我的ArrayAdapter类有问题。问题是该项目在refrigeratorItemList中被删除,但它没有反映在UI中。在视图中,只删除最后一项,无论活动中删除了哪个项目。
Activity.java(重要部分):
m_adapter.remove(m_adapter.getItem(id));
m_adapter.notifyDataSetChanged();
RefrigeratorItemAdapter.java:
public class RefrigeratorItemAdapter extends ArrayAdapter<RefrigeratorItem> {
private List<RefrigeratorItem> refrigeratorItemList;
public RefrigeratorItemAdapter(Context context, int textViewResourceId,
List<RefrigeratorItem> list) {
super(context, textViewResourceId, list);
this.refrigeratorItemList = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.simple_list_item_1, null);
RefrigeratorItem i = (RefrigeratorItem) getItem(position);
System.out.println(i.toString());
if (i != null) {
TextView tt = (TextView) v.findViewById(R.id.text1);
tt.setText(i.getProductname());
}
}
return v;
}
public void remove(RefrigeratorItem object) {
super.remove(object);
this.refrigeratorItemList.remove(object);
System.out.println(Arrays.toString(refrigeratorItemList.toArray()));
}
}
谢谢!
答案 0 :(得分:1)
你以错误的方式重用了视图。试试这样:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.simple_list_item_1, null);
}
RefrigeratorItem i = (RefrigeratorItem) getItem(position);
System.out.println(i.toString());
if (i != null) {
TextView tt = (TextView) v.findViewById(R.id.text1);
tt.setText(i.getProductname());
}
return v;
}
当v不为null时,表示View已经显示,现在您可以将其重新用于新项目。但是,您需要更新视图的内容。
例如,如果屏幕上有5个列表项:
1
2
3
4
5
现在滚动,结果如下:
2
3
4
5
6
包含'1'的视图现在用于显示'6'。但是,在您的代码中,您不会将文本视图中的te内容从1更新为6。