データベース テーブルの内容を表示するカスタム リストビューがあります。データベースに新しい項目を追加すると、リストビューがリロードされ、新しく追加された項目とテーブル内の他のすべてが表示されます。
ただし、リストビューが更新されたときに以下のコードを使用すると、追加のテーブルのコンテンツと追加後のコンテンツの両方が表示されます。例えば:
リスト ビューは次のようになります。
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();
マイリスタアダプタ
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();
ただし、古いリストと新しいリストの両方が表示されます