2013-08-20 75 views
0

我有一個自定義列表視圖,顯示數據庫表的內容。 使用可以添加一個新項目到數據庫和Listview將重新加載顯示新添加的項目以及表中的其他所有內容。重新加載列表視圖顯示新舊內容

但是在更新列表視圖時使用下面的代碼,它將同時顯示錶格中添加和添加之後的內容。例如:

列表視圖看起來像:

Item 1 
Item 2 
Item 3 

然後用戶添加一個新的項目,它應該看起來像

Item 1 
Item 2 
Item 3 
Item 4 

但相反,它顯示

Item 1 
Item 2 
Item 3 
Item 1 
Item 2 
Item 3 
Item 4 

我使用此代碼更新列表視圖

m_adapter.clear(); 
for (int i = 0; i < db.getAllLists().size(); i++) { 
     m_adapter.add(db.getAllLists().get(i)); 
} 
m_adapter.notifyDataSetChanged(); 

Mylistadapter

class MyListAdapter extends ArrayAdapter<mList> { 

     private ArrayList<mList> items; 

     public MyListAdapter(Context context, int textViewResourceId, ArrayList<mList> items) { 
       super(context, textViewResourceId, items); 
       this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.list_row_layout, null); 
       } 
       mList o = items.get(position); 
       if (o != null) { 
         TextView tt = (TextView) v.findViewById(R.id.ptitle); 
         Typeface font = Typeface.createFromAsset(getAssets(), "Asap-Regular.ttf"); 
         tt.setTypeface(font); 

         if (tt != null) { 
           tt.setText(o.getName() + " (" + db.getItemsCount(o.getID()) + ")");        
          } 
       } 
       return v; 
     } 
    } 

然後下面的代碼是在我的OnCreate:

ArrayList<mList> m_orders = db.getAllLists(); 

    MyListAdapter m_adapter = new MyListAdapter(this, R.layout.list_row_layout, m_orders); 
    ListView list1.setAdapter(m_adapter); 

讓我知道如果你需要看到任何其他代碼,謝謝

編輯 也試過

m_orders.clear(); 
m_orders = db.getAllLists(); 
m_adapter.addAll(m_orders); 
m_adapter.notifyDataSetChanged(); 

但是它仍然顯示新舊和列表

+2

看來舊列表沒有被清除,並且你添加了舊的和新的。也許你的m_adapter.clear()不能正常工作。發佈更多代碼? –

+0

@ Yume117更多發佈成本 –

+0

如何清除ArrayList(而不是適配器),然後在ArrayList中添加新項目,然後調用notifyDatasetChanged()?我的意思是,我是這樣做的,它永遠不會讓我失望。 – Swayam

回答

0

//首先明確了集合(在你的情況的ArrayList)

your_collection.clear(); 

//添加新的數據,如

ArrayList<mList> m_orders = db.getAllLists(); 

//然後刷新使用列表視圖

m_adapter.notifyDataSetChanged(); 
+0

所以我的編輯,試過這個,沒有運氣 –