2013-02-24 46 views
0

我有我的ArrayAdapter类的问题。问题在于该项目在冰箱项目清单中被删除,但它并未反映在用户界面中。在视图中,只有最后一个项目被删除,无论在活动中删除了哪个项目。Listview - 删除项目不反映在正确查看

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())); 
} 

} 

谢谢!

回答

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不为空时,这意味着视图已经显示,您现在可以重新使用它作为您的新项目。但是,您需要更新视图的内容。

例如,如果你在屏幕上5列表项:

1 
2 
3 
4 
5 

现在您滚动,造成这样的:

2 
3 
4 
5 
6 

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

+0

非常感谢您的帮助和解释! – user1259201 2013-02-24 23:43:16