我有这段代码:
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
。刚刚发生了什么?解决这个非常烦人的问题。
答案 0 :(得分:4)
我认为,当Activity
暂停并且数据通过Activity
传递到Intent
时,您所保存的状态会让您感到困惑。
你希望有类似的东西:
Bundle extras = getIntent().getExtras();
id = extras.getLong(TasksDBAdapter.KEY_ID);
传递给Bundle
的{{1}}是您使用the onSaveInstanceState()
method保存的onCreate()
,而不是您添加到Bundle
的附加内容Bundle
答案 1 :(得分:0)
您正以非常错误的方式检索额外内容。将您的第二个代码段替换为:
id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0);
Log.i(TAG, "Id of note = " + id);
以下是此代码中发生的情况:getIntent()
会返回您在第一个代码段(用于启动当前活动的Intent
)中创建的Intent
。然后,.getLongExtra()
返回附加的额外信息。如果找不到该标记的额外信息且找到该数据类型(长整数),则返回0。
savedInstanceState
用于在低内存条件下由Android系统关闭时保存应用的状态。不要混淆这两个。