1

SimpleCursorAdapterデータベースからデータをフェッチして、に表示するために使用していますListView。そのリストから1つ以上のリストアイテムを選択/削除する方法を教えてください。または、少なくとも、ArrayAdapterで表示するために使用してデータベースからデータをフェッチする方法を教えてくださいListView

チュートリアルがベストプラクティスになります。

前もって感謝します。

4

1 に答える 1

0

そのリストから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
   }
}
于 2013-03-27T08:21:29.547 に答える