SimpleCursorAdapter
データベースからデータをフェッチして、に表示するために使用していますListView
。そのリストから1つ以上のリストアイテムを選択/削除する方法を教えてください。または、少なくとも、ArrayAdapter
で表示するために使用してデータベースからデータをフェッチする方法を教えてくださいListView
。
チュートリアルがベストプラクティスになります。
前もって感謝します。
SimpleCursorAdapter
データベースからデータをフェッチして、に表示するために使用していますListView
。そのリストから1つ以上のリストアイテムを選択/削除する方法を教えてください。または、少なくとも、ArrayAdapter
で表示するために使用してデータベースからデータをフェッチする方法を教えてくださいListView
。
チュートリアルがベストプラクティスになります。
前もって感謝します。
そのリストから1つ以上のリストアイテムを選択/削除する方法を教えてください。
したがって、データベースから適切なアイテムを削除できるようにするには、すべての行のIDを取得する必要があります。一度にリストからアイテムを1つだけ削除する場合の問題は、それほど難しいことではありません。OnItemClickListenerまたはContextMenuを作成して、ユーザー削除オプションを提供するだけです。次に、CursorAdapterを使用している場合は、OnItemClickメソッドのlongidパラメーターから選択したアイテムのrowIdを自動的に取得します。ContextMenuの場合、AdapterView.ContextMenuInfoからIDを取得できます。
問題は、それ以上を削除したい場合であり、リスナーまたはContextMenuの使用は十分かつ効率的ではありません。CheckBoxを配置するListViewの独自の行を作成することを決定する必要があります。そうすれば、複数の行を削除するだけで済みます。リストをスローし、チェックボックスがオンになっているすべての行をデータベースから削除して、リストを更新します。これが私の頭に浮かんだ最初のアイデアです。
または、少なくともArrayAdapterを使用してデータベースからデータをフェッチしてListViewに表示する方法を教えてください。
ListAdapter(ArrayAdapter、BaseAdapterなど)を使用する場合は、データベースからレコードのリストをフェッチする必要があります。独自のListAdapterサブクラスを作成して、Adapterをより細かく制御することをお勧めします。ここでは、オブジェクトのプロパティがテーブルの列と等しいデータベース内のテーブルを表す独自のオブジェクトを作成することをお勧めします。次に、データベースからリストをフェッチするだけです。以下に擬似コードを示します。
public List<OwnObject> getAll() {
List<OwnObject> items = new ArrayList<OwnObject>();
OwnObject o = null;
Cursor c = null;
try {
db = helper.getReadableDatabase(); // or created some method as open();
String query = "select * from TableName";
c = db.rawQuery(query, null);
if (c.moveToFirst()) {
do {
o = new OwnObject();
o.setProperty1(c.getString(c.getColumnIndex("Column1")));
o.setProperty2(c.getString(c.getColumnIndex("Column2")));
o.setProperty3(c.getString(c.getColumnIndex("Column3")));
...
items.add(o);
} while (c.moveToNext());
}
return items;
}
finally {
if (c != null) {
c.close();
}
// close also db
}
}