我在Android和学习方面都是全新的,我注意到OnBackPressed
带您进入游戏中的先前布局,现在我添加了此代码,可以在OnBackPressed
@Override
public void onBackPressed() {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
super.onBackPressed();
}
我的问题是,当你再次开始游戏时,它会将你带回到之前的布局,而不是主布局。举个例子,你有4个活动,当我开始游戏时,我需要参加活动3我怎么能避免这个?
<application
android:allowBackup="true"
android:icon="@mipmap/icon1"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
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=".StartGame"
android:label="@string/app_name"
android:screenOrientation="portrait"/>
<activity
android:name=".MathQuestions"
android:label="@string/app_name"
android:screenOrientation="portrait"
/>
<activity android:name=".HighScores"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name=".HowToPlay" >
</activity>
</application>
答案 0 :(得分:1)
你并没有真正关闭你的应用程序。使用该代码,您只需最小化您的应用程序(模仿HOME按钮行为)。我相信,如果您在finish()
电话后致电startActivity(homeIntent)
,它会按照您的意愿运作。
答案 1 :(得分:0)
修改标志:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
并调用finish()而不是super.onBackPressed();
我做了一些阅读并发现了这个:
此启动模式也可以与FLAG_ACTIVITY_NEW_TASK结合使用:如果用于启动任务的根活动,它会将该任务的任何当前运行的实例带到前台,然后将其清除到其根目录州。这在从通知管理器启动活动时尤其有用。
来自CLEAR_TOP的文档
编辑:另一种解决方案。
这对你不起作用,让我们这样做:
创建一个扩展应用程序的自定义类,大部分时间不需要这个,但在这里会有所帮助。称之为MyApp.java
public class MyApp extends Application {
private HashSet<Activity> mActivities;
@Override
public void onCreate(){
super.onCreate();
mActivities = new HashSet<Activity>();
}
public void addActivity(Activity activity){
if(!mActivities.contains(activity))
mActivities.add(activity);
}
public void removeActivity(Activity activity){
if(mActivities.contains(activity))
mActivities.remove(activity);
}
public void close(){
for(Activity activity : mActivities){
activity.finish();
}
}
并将其添加到应用程序标记中的android清单中(保持不变):
<application
android:name=".MyApp"
...
...
现在,在每个活动中都会调用以下内容:
@Override
public void onStart(){
super.onStart();
((MyApp) getApplication()).addActivity(this);
}
所以现在每个活动都存储在你自己的HashSet中,可以在需要时优雅地完成。
现在只需执行以下操作,而不是调用意图:
@Override
public void onBackPressed(){
((MyApp) getApplication()).close();
}
所有活动都已完成,资源已经发布,当您返回应用程序时,它将在您的主页活动中。现在,对于销毁或停止活动的情况,您可能/可能不需要removeActivity调用,但此解决方案应该可行。就像我说的,这是一个更多的工作,但会解决你的问题。