0

私はこのコードを持っています:

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Log.i(TAG, "The id of the selected note is " + id);
    Intent editNote = new Intent(this, TaskEditActivity.class);
    editNote.putExtra(TasksDBAdapter.KEY_ID, id);
    startActivityForResult(editNote, EDIT_TASK_REQUEST);
}

そして、異なるアクティビティから余分なものを取得するこのコード:

 if (savedInstanceState != null) {
        id = savedInstanceState.getLong(TasksDBAdapter.KEY_ID);
    }
 Log.i(TAG, "Id of note = " + id);

最初のコードスニペットでは、Logcatは次のように述べていますThe id of the selected note is 2が、2番目のコードスニペットでは、Logcatは次のように述べていますId of note = 0。ここで何が起こったのですか?この非常に厄介な問題の解決策。

4

2 に答える 2

4

が一時停止したときに保存される状態と、経由で にActivity配信されるデータを混同していると思います。ActivityIntent

次のようなものが必要です。

Bundle extras = getIntent().getExtras();
id = extras.getLong(TasksDBAdapter.KEY_ID);

Bundle渡されたonCreate()は、メソッドBundleで保存しonSaveInstanceState()Bundleであり、に追加したエクストラではありませんIntent

于 2010-08-03T15:27:07.177 に答える
0

エクストラを非常に間違った方法で取得しています。2 番目のコード スニペットを次のように置き換えます。

id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0);
Log.i(TAG, "Id of note = " + id);

このコードで何が起こるか:は、最初のコード スニペットで作成しgetIntent()た を返します(現在のアクティビティを起動するために使用された )。次に、添付された追加情報を返します。そのタグとそのデータ型 (long) を持つ追加情報が見つからない場合は、0 を返します。IntentIntent.getLongExtra()

savedInstanceStateメモリ不足の状態で Android システムによってシャットダウンされたときに、アプリの状態を保存するために使用されます。この 2 つを混同しないでください。

于 2010-08-03T15:32:08.833 に答える