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,但在第二个代码片段中,Logcat 说:Id of note = 0。这里刚刚发生了什么?这个非常烦人的问题的任何解决方案。

4

2 回答 2

4

我认为您混淆了Activity暂停时保存的状态以及Activity通过Intent.

你想要这样的东西:

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

Bundle传递给的onCreate()是您使用方法Bundle保存的内容,而不是您添加到.onSaveInstanceState()BundleIntent

于 2010-08-03T15:27:07.177 回答
0

您正在以非常错误的方式检索额外内容。将您的第二个代码段替换为:

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

以下是此代码中发生的情况:getIntent()返回Intent您在第一个代码片段中创建的(Intent用于启动当前活动的)。然后,.getLongExtra()返回附加的额外信息。如果没有找到带有该标签的额外信息并且找到该数据类型(长),它将返回 0。

savedInstanceState用于在内存不足的情况下被 Android 系统关闭时保存应用的状态。不要混淆这两个。

于 2010-08-03T15:32:08.833 回答