我制作了一个基本的Android应用程序,包含3个活动; A,B和C. A是主要活动。这是您第一次启动应用时启动的第一个活动。 A中有一个按钮,它发送打开B的意图。在B中,用户可以选择他们的难度等。一旦选中,C就会被调用。 C是主要游戏发生的地方。用户完成游戏后,会弹出一个分数对话框并显示用户分数。
现在,当用户按下确定时,对话框消失,用户仍然在C.如果他按下后退按钮,则B被调用。如何使用当用户在乐谱对话框上按OK时,它会将他发送给A,如果他按下A上的后退按钮(他试图从A回到C),我该如何预防发生了什么?
编辑=一个问题,我在我的C活动中使用共享首选项,并且我的A活动上有一个继续按钮。当用户完成C时,我想破坏保存文件(brainData),然后继续进行A.我通过SharedPreferences pref = getSharedPreferences("brainData", Context.MODE_PRIVATE); pref.edit().clear().commit();
对保存文件进行破坏,但是当我在A活动上按下继续时,它仍然会加载文件。我正在C actvity fyi的onPause()中写入保存文件。
答案 0 :(得分:0)
在对话框的“确定”按钮上,添加一个“意图”以启动活动A.
答案 1 :(得分:0)
当用户点击“确定”时,只需添加:
startActivity(new Intent(C.this, A.class));
finish();
或者如果你不想在A中完成C只是覆盖这些方法:
@Override // 2.0 and above
public void onBackPressed()
{
}
@Override // Before 2.0
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:0)
在活动A和B中,您可以覆盖方法onPause()
,并且您需要调用finish()
。这将在B启动时完成()活动A& C启动时完成B.同时将onPause()
添加到C.代码
@Override
protected void onPause()
{
super.onPause();
finish();
}
要在单击对话框按钮时再次发送到A,请使用以下代码再次启动活动A
startActivity(new Intent(C.this, A.class));
要在onclick方法中单击“确定”按钮时删除共享首选项,请执行
****删除所有首选项:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
****删除单个首选项:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
答案 3 :(得分:0)
启动活动B时添加标记Intent.FLAG_ACTIVITY_NO_HISTORY
。
Intent i = new Intent(A.this,B.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
第二种方法是将参数android:noHistory="true"
添加到清单文件中的活动B.
这样可以防止B出现在靠背堆中。
其他答案只是添加另一个A活动进行堆叠,但不从中删除B.
要在分数对话框中按OK按钮时离开活动C,只需在OK按钮单击监听器中调用activity.finish()
。