3

ListView私はいくつかの基本的な Android 開発に飛び込み始めたところですSimpleCursorAdapter。私は多くのオンライン コード サンプルに目を通していますが、参考として使用できる本もあります (Professional Android 2 Application Development)。

この本では、自動インクリメント、整数、主キー フィールドを持つ SQLite データベースにリスト アイテムを格納する To-Do リスト アプリケーションの例を作成しています。

ユーザーは新しいリスト アイテムを作成できますが、選択したアイテムをリストから削除することもできます。コードでは、削除が発生すると、項目の属性ではなく、項目の属性によって主キー フィールドが ( WHERESQL ステートメントの句内で) 制限されます。positionrowid

私には、これは正しくない実装のように思えます。の SQLite ドキュメントを見るAUTOINCREMENTと、この値は常に増加し、古い値が同じテーブルで再利用されることはないと書かれています。そのため、リストに何かを削除したり追加したりすると、位置と行 ID がすぐに同期しなくなる可能性があります。

では、リストの位置ではなく、行IDがデータベーステーブルに「インデックス」する正しい方法であると仮定するのは正しいでしょうか? 通常の を使用している場合、この位置は安全に使用できると思いますがListAdapter、データベースにインデックスを作成する場合には適していないようです。

4

2 に答える 2

1

位置を使用して、特定のリスト エントリへのカーソルを取得できます (このカーソルは、行 ID に対応する「テーブル」内の「行」になります)。

Cursor cursor = (Cursor)parent.getItemAtPosition(pos);
int rowCol = c.getColumnIndex("_id");

次に、それを見る必要がありますcursor.getLong(rowCol) == id

于 2011-07-12T00:28:54.280 に答える
0

それは間違いなく悪い習慣です。私は常に行 ID を使用して削除し、位置 ID を使用してカーソルの行 ID を取得します。私はその本の初版を家に持っているので、後で自分で見てみようと思います。

于 2011-07-12T00:33:41.050 に答える