私はちょうど基本的なAndroidの開発を開始しており、ListView
を実験し、SimpleCursorAdapter
と統合しています。私は多くのオンラインコードサンプルを見ていますが、私はリファレンスとして使う本もあります(Professional Android 2 Application Development)。ListViewの行IDと位置インデックスの混乱
本書では、自動的にインクリメントする整数、プライマリキーフィールドを持つSQLiteデータベースにリスト項目を格納するTo-Doリストアプリケーションの例を取り上げています。
ユーザーは新しいリストアイテムを作成できますが、選択したアイテムをリストから削除することもできます。コードでは、削除が発生すると、項目のrowid
とは対照的に、項目のposition
属性によって主キー項目が制限されます(SQL文のWHERE
句内)。
私には、これは誤った実装のようです。 AUTOINCREMENT
のSQLiteドキュメントを見ると、この値は常に増加し、古い値は決して同じテーブルで再使用されないという。したがって、リストにあるものを削除して追加する場合、位置と行IDがむしろ速やかに同期しなくなる可能性があります。
ローのIDがデータベーステーブルに「インデックスする」正しい方法であると仮定し、ではなく、リストの位置をとしますか?私はその位置が普通のListAdapter
を使用している場合は安全だと考えていますが、データベースにインデックスを付けるときは適切ではないようです。
リストの位置を使用して行IDを取得し、行IDを削除するだけではありませんか? –
'return db.delete(DATABASE_TABLE、KEY_ID +" = "+ _rowIndex、null)> 0;' _rowIndex'は行IDではなく項目の位置です。 。これは、コンテキストメニューのコールバックから呼び出され、 'menuInfo.position'を' _rowIndex'として渡します。 –
今すぐお答えします –