转到主页

时间:2018-03-14 00:59:06

标签: android android-intent android-activity android-lifecycle back-stack

从我的MainActivity(启动器活动)我按一个按钮启动我的GameActivity。我有它,所以当我点击Game Activity中的Back按钮时,我不会返回到我的MainActivity,而是返回到我的主屏幕。现在当我恢复我的应用程序时,它会转到MainActivity,而不是返回到GameActivity,尽管显示它。

目标

主要活动 - >游戏活动 - >首页 - >游戏活动

当前结果

主要活动 - >游戏活动 - >首页 - >家庭活动

有几件事......

  • 当我使用我的主页和菜单按钮导航时,它的效果非常好。
  • 我的Manifest中没有launchMode

让我们看看我做了什么!

主要活动按钮单击

 Button startButton = findViewById(R.id.buttonStart);
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, GameActivity.class);
            //stops back button to return to add player screen
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

            startActivity(intent);

        }
    });

Manifest Simplified

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainPage.MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        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=".GamePage.GameActivity"
        android:label="@string/title_activity_game"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait" />
</application>

3 个答案:

答案 0 :(得分:1)

在这种情况下,只需在启动GameActivity后立即调用finish()。

Button startButton = findViewById(R.id.buttonStart);
    startButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, GameActivity.class);
            startActivity(intent);
            finish();
        }
    });

编辑:同时更新GameActivity的launchMode:

<activity android:name=".GameActivity" android:launchMode="singleInstance">

答案 1 :(得分:0)

当您点击设备的后退按钮时,方法 onBackPress 被调用,您可以根据需要覆盖他以重定向用户,这意味着您可以更改后退按钮的操作,代码:

//When Back Button on click, it will come to this method.
@Override
public void onBackPressed() {
    //Do anything you want here, 
}

答案 2 :(得分:0)

使用传统的后堆栈机制似乎无法做到这一点。您无法使用后退按钮返回到主屏幕,而不会首先弹出后堆栈中的所有活动(因此,如果没有内存泄漏,则会销毁它们)。

然后,当您单击菜单按钮时,应显示上次显示的活动的屏幕截图,但由于您的所有活动都已销毁,因此会加载启动器活动。

您可以选择在您选择的位置重新进入应用程序的一种方法是通过实施导航活动(在许多情况下这是一个启动画面)作为启动器活动。在此Activity中,您将确定(使用持久存储,即SharedPreferences)应将应用程序设置为哪个Activity / back-stack状态。

对于此示例,当您输入boolean时,可以在isInGame中存储带有密钥SharedPreferences的{​​{1}}。然后,在导航活动中,您可以检索该值,并在GameActivity时启动GameActivity。显然,对于处理游戏/应用程序状态,你将需要存储更多,但这证明了简单的导航。