返回首页后继续Activity
Resume Activity after going to home page
从我的 MainActivity(启动器 Activity)我按一个按钮开始我的游戏Activity。我有它,所以当我在游戏 Activity 中点击后退按钮时,我不会 return 到主屏幕 Activity 而是 return 到我的主屏幕。现在,当我恢复我的应用程序时,它会转到 MainActivity 而不是 returning 到 GameActivity 尽管已显示。
目标
主要 Activity -> 游戏 Activity -> 首页 -> 游戏 Activity
当前结果
主要Activity -> 游戏Activity -> 首页 -> 首页Activity
几件事..
- 当我使用我的主页和菜单按钮导航时,它工作得很好。
- 我的清单中没有启动模式
让我们看看我做了什么!
主要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);
}
});
简化清单
<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>
当您点击设备的后退按钮时,方法 onBackPress 被调用,您可以覆盖他以根据需要重定向用户,这意味着您可以更改操作后退按钮,代码:
//When Back Button on click, it will come to this method.
@Override
public void onBackPressed() {
//Do anything you want here,
}
在那种情况下,只需在启动 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 的启动模式:
<activity android:name=".GameActivity" android:launchMode="singleInstance">
使用传统的 back-stack 机制似乎无法做到这一点。如果不首先弹出 back-stack 中的所有 Activity(因此,如果没有内存泄漏,则销毁它们),您无法使用后退按钮 return 返回主屏幕。
然后,当您单击菜单按钮时,应该会显示您上次显示的 Activity 的屏幕截图,但是由于您的所有 Activity 都已销毁,因此您的启动器 Activity 已加载。
您可以在您选择的位置处理 re-entering 应用程序的一种方法是将导航 Activity(在许多情况下这是启动画面)作为启动器 Activity.在此 Activity 中,您将确定(使用持久存储,即 SharedPreferences)应将应用程序设置为哪个 Activity/back-stack 状态。
对于此示例,当您输入 GameActivity
时,您可以在 SharedPreferences
中存储一个 boolean
和键 isInGame
。然后在导航 activity 中,您可以检索值并在 true
时启动 GameActivity
。显然,为了处理 game/app 状态,您必须存储更多内容,但这演示了简单的导航。
从我的 MainActivity(启动器 Activity)我按一个按钮开始我的游戏Activity。我有它,所以当我在游戏 Activity 中点击后退按钮时,我不会 return 到主屏幕 Activity 而是 return 到我的主屏幕。现在,当我恢复我的应用程序时,它会转到 MainActivity 而不是 returning 到 GameActivity 尽管已显示。
目标
主要 Activity -> 游戏 Activity -> 首页 -> 游戏 Activity
当前结果
主要Activity -> 游戏Activity -> 首页 -> 首页Activity
几件事..
- 当我使用我的主页和菜单按钮导航时,它工作得很好。
- 我的清单中没有启动模式
让我们看看我做了什么!
主要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);
}
});
简化清单
<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>
当您点击设备的后退按钮时,方法 onBackPress 被调用,您可以覆盖他以根据需要重定向用户,这意味着您可以更改操作后退按钮,代码:
//When Back Button on click, it will come to this method.
@Override
public void onBackPressed() {
//Do anything you want here,
}
在那种情况下,只需在启动 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 的启动模式:
<activity android:name=".GameActivity" android:launchMode="singleInstance">
使用传统的 back-stack 机制似乎无法做到这一点。如果不首先弹出 back-stack 中的所有 Activity(因此,如果没有内存泄漏,则销毁它们),您无法使用后退按钮 return 返回主屏幕。
然后,当您单击菜单按钮时,应该会显示您上次显示的 Activity 的屏幕截图,但是由于您的所有 Activity 都已销毁,因此您的启动器 Activity 已加载。
您可以在您选择的位置处理 re-entering 应用程序的一种方法是将导航 Activity(在许多情况下这是启动画面)作为启动器 Activity.在此 Activity 中,您将确定(使用持久存储,即 SharedPreferences)应将应用程序设置为哪个 Activity/back-stack 状态。
对于此示例,当您输入 GameActivity
时,您可以在 SharedPreferences
中存储一个 boolean
和键 isInGame
。然后在导航 activity 中,您可以检索值并在 true
时启动 GameActivity
。显然,为了处理 game/app 状态,您必须存储更多内容,但这演示了简单的导航。