2013-02-24 43 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