0

現在、メモ帳のチュートリアルを行っています。演習2で、メモを削除するためのコードを完成させます。ただし、これがどのように機能するかは少し混乱しています。関連するコードは次のとおりです。

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);
}

演習では、「この[AdapterContextMenuInfo]オブジェクトのidフィールドは、ListView内のアイテムの位置を示します。次に、これをNotesDbAdapterのdeleteNote()メソッドに渡すと、メモが削除されます。」

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

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

4

1 に答える 1

1

例のテキストを書くときに誰かが小さな間違いをしたように私には思えます。AdapterContexteMenuInfoidのフィールドのドキュメントを見ると、要素の行IDを返すことが示されています。これは、のメソッドによって提供されます。AdaptergetId()

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

   adb -e shell

次に、アプリケーションのフォルダー(/data/data/com.yourpackage内)に移動します。databasesフォルダがあるはずです。シェルから、と入力しsqlite3 <databaseFileName>ます。その後、サポートされているデータベース操作(選択、更新など)を実行できます。このページをチェックしてください。sqlite3に関するセクションもあります。

于 2011-07-03T00:19:46.933 に答える