2011-07-02 5 views
0

私は現在メモ帳のチュートリアルを行っており、exercise 2はメモを削除するコードを完成させています。しかし、私はこれがどう機能するのかちょっと混乱しています。Androidノートパッドのチュートリアルで行の削除機能はどのように機能しますか?

public boolean onContextItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
     case DELETE_ID: 
      AdapterContextMenuInfo info = 
        (AdapterContextMenuInfo) item.getMenuInfo(); 
      mDbHelper.deleteNote(info.id); 
      fillData(); 
      return true; 
    } 
    return super.onContextItemSelected(item); 
} 

運動状態:ここに関連するコードです。この」idフィールドは、[AdapterContextMenuInfo]オブジェクトは、ListViewコントロールに私たちの項目の位置を伝える私たちは、その後、私たちのNotesDbAdapterのdeleteNote()メソッドにこれを渡します。メモは削除されます。

データベース定義を見ると、データベースに新しく追加された行/注釈のIDフィールドは、自動インクリメント番号によって自動的に生成されます。したがって、IDの1,2,3,4の4つのノート(ゼロのインデックスが付いているかどうかわからない!)を2番目のノートを削除すると、1,3,4のIDが残っていてもいけませんか?つまり、最後のメモ(リストの3番目のレコードですが、元の4番目のインデックスは削除されています)を削除すると、index = 3の行が削除されますか?または、行が削除されたときに行が自動再索引付けされますか?

最後に、携帯電話でアプリケーションのデータベースを閲覧/閲覧できますか?

答えて

1

例のテキストを書くときに誰かが少し間違いをしたようです。 idフィールドのドキュメントがAdapterContexteMenuInfoの場合は、要素の行IDが返されると記載されています。これは、AdaptergetId()メソッドによって提供されます。

そして、はい、あなたの携帯電話のデータベースを読むことができます。 (あなたがエミュレータを使用している場合)は、コマンドラインから次のコマンドを使用して、エミュレータのシェルに接続します。

adb -e shell 

あなたはその後、(/data/data/com.yourpackageに)あなたのアプリケーションのフォルダに入ります。 databasesフォルダが必要です。シェルから、sqlite3 <databaseFileName>と入力します。その後、サポートされている任意のデータベース操作(選択、更新など)を実行できます。チェックアウトthis page、それはsqlite3上のセクションもあります。

+0

ああ、ありがとう。したがって、戻される行IDは、ビューの物理的な配置ではなく、データベースの行IDです。したがって、リストのどこに行があるかは問題ではありません(どのように実装されると思いますか) –

+0

ええ。別のフィールド、 'position'はリスト/アダプタ内の実際の位置を持っています。 – dmon

関連する問題