我是Android开发的新手,我遇到了一个问题。 我有一个包含ListFragment的活动。点击列表项后,新的活动开始。我决定使用菜单栏上的“主页”按钮在子活动中进行后退导航。
if (NavUtils.getParentActivityName(getActivity()) != null){
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (NavUtils.getParentActivityName(getActivity()) != null){
NavUtils.navigateUpFromSameTask(getActivity());
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我还需要将整数值保存到父Activity中。所以我重写了onSaveInstanceState()
@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
Log.d("ACTIVITY_STATE", " onSave");
savedInstanceState.putInt(TAG_INT_VAL_SAVED, intVal);
}
但是当我点击子Activity的后退箭头并调用父Activity的onCreate方法时,看起来参数Bundle为null,直到以下代码的Log ...
if (savedInstanceState != null){
intVal = savedInstanceState.getInt(TAG_INT_VAL_SAVED);
Log.d("ACTIVITY_STATE", " onSave getting data"); // Never appears at LogCat
} else {
// code to assign intVal as if the Activity was just started
}
我有点困惑,所以我想问你们,伙计们,求助。当导航发生时,你能告诉我,发生了什么事吗?我应该怎么做才能保持intVal?谢谢!
B.t.w。它在屏幕旋转时工作正常 - 成功检索到该值。
清单看起来像:
<activity
android:name=".ListItemActivity"
android:label="@string/app_name" >
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".MyListActivity"/>
</activity>
<activity android:name=".MyListActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>