【问题标题】:Issue with Toolbar Back-Button leading back to Parent Activity工具栏后退按钮导致返回父活动的问题
【发布时间】:2015-12-18 10:09:30
【问题描述】:

我正在开发一个包含 3 个活动的应用。 Main 和另外两个,可以从 Main 启动。两者都有一个工具栏后退按钮,它通向 Main,它在后堆栈上等待。 在这种情况下会出现问题:

从 Main 启动 Activity B。 - 将应用程序留在主屏幕 - 稍等片刻,做一些其他的事情,...(或在应用程序设置中强制关闭应用程序) - 使用 app-overview 重新启动它(在 Activity B 中重新启动应用程序) - 按工具栏后退按钮 -> 应用程序关闭。

此时我预计它会返回 Main,但事实并非如此。

清单:

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <!-- ACTIVITIES -->
    <activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/app_name"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".ReminderActivity"
        android:label="Reminder"
        android:launchMode="singleTask"
        android:parentActivityName=".MainActivity"
        android:screenOrientation="portrait">

        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="yyyy.yy.yyyy.MainActivity" />
    </activity>

    <activity
        android:name=".PreferencesActivity"
        android:label="Preferences"
        android:launchMode="singleTask"
        android:parentActivityName=".MainActivity"
        android:screenOrientation="portrait">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="yyyy.yy.yyyy.MainActivity" />
    </activity>

    <!-- RECEIVERS -->
    <receiver android:name="yyyy.yy.yyyy.StartupReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <receiver android:name=".NotiDeactivateReceiver"></receiver>

    <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
         App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

</application>

活动: 我使用了在 stackoverflow 找到的代码

public void initToolbar() {

    toolbar = (Toolbar) findViewById(R.id.toolbar2);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == android.R.id.home) {
        finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

我还尝试使用 NavUtils 来“向上”。效果一样。

我在我的场景中尝试了其他一些应用程序,我注意到,当它们被踢出内存(或被我使用应用程序设置手动杀死)时,它们会在主活动中重新启动。我的从我离开的地方重新开始,但可能没有回栈。

你能帮我弄清楚这里出了什么问题吗?

【问题讨论】:

  • 你能把你的清单部分发布在声明其他两个活动的地方
  • 这里调用finish() 方法。菜单项中的home有什么用,你能说清楚吗?

标签: android android-activity navigation back


【解决方案1】:

尝试在清单中替换 MainActivity 的属性

android:launchMode="singleInstance"

到

android:launchMode="singleTop"

【讨论】:

  • 有道理。当 A 是 SingleInstance 并且我从它启动 B 时,B 会打开一个新任务。现在两者都进入后台并且都被系统杀死。当我通过多任务按钮重新输入 B 并按回时,它无处可去,因为 A 在另一个不再存在的任务中。我一回家就试一试。
  • 这个答案有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多