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();
但是它仍然顯示新舊和列表
看來舊列表沒有被清除,並且你添加了舊的和新的。也許你的m_adapter.clear()不能正常工作。發佈更多代碼? –
@ Yume117更多發佈成本 –
如何清除ArrayList(而不是適配器),然後在ArrayList中添加新項目,然後調用notifyDatasetChanged()?我的意思是,我是這樣做的,它永遠不會讓我失望。 – Swayam