我在 Activity 导航方面遇到问题,我无法弄清楚我做错了什么。
我有一个 MainActivity
和一个 SettingsActivity
但使用 Back
和 Up
(在操作栏上)设置 Activity 有两个不同的结果。
例如,如果我按下后退按钮,我会在 MainActivity
中获得以下生命周期回调:
V/lifeCycle: onOptionsItemSelected
V/lifeCycle: onPause
V/lifeCycle: onSaveInstanceState-Bundle[..]
V/lifeCycle: onStop
<< PRESS BACK BUTTON >>
V/lifeCycle: onRestart
V/lifeCycle: onStart
V/lifeCycle: onResume
V/lifeCycle: onPostResume
如果我按下 Navigate UP 按钮,我会得到这些结果:
V/lifeCycle: onOptionsItemSelected
V/lifeCycle: onPause
V/lifeCycle: onSaveInstanceState-Bundle[..]
V/lifeCycle: onStop
<< PRESS NAV UP >>
V/lifeCycle: onDestroy // Problem
V/lifeCycle: onCreate // Seems
V/lifeCycle: onStart // Here
V/lifeCycle: onResume
V/lifeCycle: onPostResume
问题是当我按下 Nav UP
时,我的 Main Activity 被销毁并重新创建,这意味着我丢失了所有 View 状态,但按下后退按钮不会执行此操作。
我不确定这是否是我启动 PreferenceActivity
的方式:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
或者我在 AndroidManifest.xml
中的 Intent 是如何配置的:
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.PREFERENCE" />
</intent-filter>
</activity>
这可能是导致问题的原因,或者如果这只是我需要覆盖的正确行为,如果是这样,什么是“正确”的覆盖方法?
最佳答案
移除
android:parentActivityName=".MainActivity"
来自 SettingsActivity 的 list 文件。
编辑:不再需要以上步骤。
在您的 SettingsActivity 类中,执行以下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case android.R.id.home:
this.finish();
return (true);
}
return super.onOptionsItemSelected(item);
}
关于android - Back 和 Nav Up 有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657421/