如何使活动不回溯到以前的活动

时间:2016-02-14 23:21:34

标签: java android

我制作了一个基本的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()中写入保存文件。

4 个答案:

答案 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)

  1. 在活动A和B中,您可以覆盖方法onPause(),并且您需要调用finish()。这将在B启动时完成()活动A& C启动时完成B.同时将onPause()添加到C.代码

    @Override
    protected void onPause()
    {
    super.onPause();
    finish();
    }
    
  2. 要在单击对话框按钮时再次发送到A,请使用以下代码再次启动活动A

    startActivity(new Intent(C.this, A.class));
    
  3. 要在onclick方法中单击“确定”按钮时删除共享首选项,请执行

    ****删除所有首选项:

    SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
    settings.edit().clear().commit();
    
  4. ****删除单个首选项:

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