0

我的 ArrayAdapter 类有问题。问题是该项目在冰箱项目列表中被删除,但它没有反映在 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()));
}

 }

谢谢!

4

1 回答 1

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 时,表示该视图已经显示,您现在可以将其重用于新项目。但是,您确实需要更新视图的内容。

例如,如果屏幕上有 5 个列表项:

1  
2  
3  
4  
5  

现在滚动,结果如下:

2  
3  
4  
5  
6  

包含“1”的视图现在用于显示“6”。但是,在您的代码中,您不会将 textview 中的内容从 1 更新到 6。

于 2013-02-24T23:37:09.030 回答