2011-11-08 2 views
1

メモ帳のチュートリアルパート2を完了し、すべての動作がうまくいきます。 しかし、それが動作している理由は、一つのこと私はただできない数字アウトがあります。)Androidノートパッドチュートリアル - onListItemClick

onListItemClickコールバックは、パラメータをretreives:

  • のListViewリットル -
  • ビューVをチェック -
  • をチェック位置 - ユーザーがクリックしたアイテムの位置。ゼロベースのインデックスから始まる。
  • id - ユーザーが犯したアイテムの行ID

これは、SqlLite DBテーブルの "notes"で使用されているのと同じrowId ...と思われますが、地獄の場合は ListActivityはこの列を行IDとして使用することについて知っていますか? ListとDBテーブルの間にマッピングがありませんでした。私たちはfillDataでバインドしたCursorだけでした。 しかし、UIのTitle列とtext1 idの間にはマッピングしかありません。 したがって、rowIdバインディングはどこにありますか?そのバインディングを別のソースに変更したい場合はどうすればよいですか?事前 で

Thxをアレックス

+0

カーソル内の_idカラムから... – Selvin

答えて

0

SimpleCursorAdapter(fillData()メソッド内)は、データベースカーソルのデータをリストビューにバインドします。アイテムがクリックされるたびに、CursorAdapterはどのアイテムがクリックされたかを認識し、idをそのリストに渡します。

+0

あなたの答えをありがとう。しかし、NotesDBAdapterのdeleteNote()操作はどうですか? rowIdを受け取り、return mDb.delete(DATABASE_TABLE、KEY_ROWID + "=" + rowId、null)のような削除操作を実行します。 dleteNote()メソッドは、AdapterContextMenuInfo.idを使用してonContextItemSelected()で呼び出されます。 doesnßtこれはUIのrowIdがDB内で同じでなければならないことを意味しますか?それとも、これは単に「ランダム」なのでしょうか?すみません、私は混乱しました;) –

0

これは、SQLのようにROWIDではありません。データベースはフォーム要素とはまったく異なります。

このコンテキストのrowIDは、クリックする内容を示す0ベースのインデックスです。あなたのカーソルは、単にテーブルからListViewにデータを入力しています。 ContentProvidersまたはSQLiteクエリで直接クエリを作成しない限り、行を選択する必要はありません。

こちらがお役に立てば幸いです。

+0

回答ありがとうございますが、これにより2つの質問がさらに出されます: これはDBのrowIDではない場合、なぜonListItemClickメソッドの 'id'パラメータをeditIntent.putExtra(NotesDbAdapter.KEY_ROWID、id)のような意図ですか?これは、DB.rowID = ListView.Idであることを推測します。 もう一つの質問は、位置とidパラメータの違いですか?私の例では、2つのエントリがあり、位置= 1とrowId = 4の2番目をクリックして、デバッグする前にメモを追加して削除したと仮定しています。 –

+0

これらの質問は何ですか? – Codeman

+0

@Alexander Beer私のコメントを参照してください...とにかく...それはあなたのテーブルからdbまたは他のPKからROWIDにすることができます。あなたがする必要があるのは、SELECT blabla AS _id、rest 、列、行く、ここからテーブル "...編集:言及を忘れた... AFAIK sqliteの場合は、独自の整数/ロングPKを使用する場合、この列にROWIDを指します – Selvin

関連する問題