android - Back 和 Nav Up 有不同的结果

标签 android android-activity android-actionbar android-manifest android-lifecycle

我在 Activity 导航方面遇到问题,我无法弄清楚我做错了什么。

我有一个 MainActivity 和一个 SettingsActivity 但使用 BackUp (在操作栏上)设置 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/

相关文章:

java - 如何在 Android 中处理玩家回合?

Android NFC 读取标签问题。每次收到数据时 Activity 都会启动

ios - 如何删除 ActionBar 上 ActionContent 和 NavigationContent 的边框

android - 如何使用代码实现关机

iphone - Android从listview中删除,用户体验

Android Loopers :Unable to get messages from UIThread to worker thread

android - 带有 overridePendingTransition 的 Activity 的滑动动画有奇怪的效果

android - 如何在 Android 上管理 startActivityForResult

android - invalidateOptionsMenu 不会从 fragment 中调用

Android:getSupportActionBar() 在 ActionBarSherlock 库中总是返回 null