回到主页后恢复活动

3
从我的主活动(启动器活动)中,我按下一个按钮来启动我的GameActivity。当我在Game Activity中按返回按钮时,我不会返回到我的MainActivity,而是返回到我的主屏幕。现在,即使已显示,当我恢复我的应用程序时,它仍然转到MainActivity而不是返回到GameActivity。

目标

Main Activity -> Game Activity -> Home -> Game Activity

当前结果

Main Activity -> Game Activity -> Home -> Home Activity


几个问题..

  • 当我使用我的主页和菜单按钮导航时,它完美地工作。
  • 我在我的清单中没有launchMode

那么让我们看看我做了什么!


Main Activity按钮点击

 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

 <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>

你如何恢复你的应用程序?(步骤) - Cao Minh Vu
我点击菜单按钮,它出现了,然后我用手指轻触它。除此之外,我什么也没有。我认为它应该只是转到正确的活动,因为其他堆栈已被清除。 - C. Skjerdal
请参考此处:https://dev59.com/mGoy5IYBdhLWcg3wUcb_#26492794 - Rohit Sharma
这些是停止返回上一个活动的解决方案,它们并没有解决使用我的方法恢复应用程序的问题。这些答案也在评论中提出,并且我已经尝试了您链接中评论中提到的各种不同的方法,但结果没有改变。 - C. Skjerdal
1
我认为您在链接中滚动得太快,可能错过了Asok在“android:launchMode”和Android文档(“singleTask”或“singleInstance”)上的回答。但无论如何,很高兴它对您有用。 :) - Rohit Sharma
3个回答

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">

我实际上已经尝试过这个,但结果没有改变。 - C. Skjerdal
我已经移除了意图标志,但结果仍然相同。 - C. Skjerdal
让我来概括一下:目前您想要的流程是: 主活动 -> 游戏活动 -> 按下返回按钮 -> 设备主屏幕 -> 按下矩形按钮并选择应用程序 -> 游戏活动。我说得对吗? - Cao Minh Vu
是的,你说得对。 - C. Skjerdal
好的,再来一步:为您的游戏活动添加launchMode。请查看更新。 - Cao Minh Vu
哇,终于成功了。我尝试了不同的组合方式,但是我猜这才是正确的方法。感谢你额外的努力,现在完美运行。 - C. Skjerdal

0

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

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

您可以处理重新进入应用程序的选择点的一种方法是通过实现导航活动(在许多情况下,这是一个闪屏)作为启动器活动。在此活动中,您将确定(使用持久存储即SharedPreferences)应将应用程序设置为哪个活动/后退栈状态。

对于此示例,您可以在进入GameActivity时在SharedPreferences中使用键isInGame存储布尔值。然后在导航活动中,您可以检索该值,并在true时启动GameActivity。显然,要处理游戏/应用程序状态,您将不得不存储更多内容,但这演示了简单的导航。


这样做更有意义,我无法理解这种行为的逻辑。这也很好,因为我计划在接下来的一两天内制作一个闪屏界面。我会开始处理这个问题,看看能达到什么效果。 - C. Skjerdal
我差点投票给这个评论,但是上面的评论找到了一个更简单的解决方案,感谢帮助。我认为这也是解决这个问题的好方法。 - C. Skjerdal

0

当您点击设备的返回按钮时,会调用方法onBackPress,您可以重写它以根据您的需要重定向用户,这意味着您可以更改返回按钮的操作,代码:

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

我应该导航到哪里?返回按钮会将我从我的应用程序带回主页。 - C. Skjerdal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接