Android:模拟后退按钮两次

时间:2013-08-14 17:23:21

标签: android

我的情况是我有三步注册过程。每个步骤都包含在它自己的活动中 - 称为A,B和C.只有当我到达第三步结束时,我才能可靠地验证其中一个输入(以及我使用PHPMailer向其发送确认的电子邮件地址) 。如果这出现错误,我想一直回到A,这是输入电子邮件地址的地方。

只需调用一个Intent即可。但是,我想保留用户最初输入的输入值,这样他们就不必再输入它们。从理论上讲,最简单的方法是两次调用finish()。但这不起作用,因为一旦调用它将控制权转回B并且第二次调用永远不会发生。

有一种简单的方法可以做到这一点,还是我必须调用Intent然后以某种方式通过另一种方法填充字段?谢谢!

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全得到你,但你可以使用标志FLAG_ACTIVITY_CLEAR_TOP将其带回A并删除B.

Intent i = new Intent(C.this, A.class)
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

当您收到错误时运行此代码,它将带来A备份。如果按下“返回”按钮,您仍然会到达B.

您拥有的另一个选项是将信息存储在SharedPreferences之类的内容中并从那里加载数据,但这对您的情况可能没有必要。

答案 1 :(得分:-1)

要在活动之间传递数据,请在此课堂活动中使用Bundle作为示例 - B

Intent intent = new Intent(this, C.class);
Bundle b = new Bundle();
b.putBoolean("some_boolean_value", true);
b.putInt("some_int_value", 4);
b.putString("some_string_value", "foobar");
intent.putExtra("fooBundle", b);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

然后,从您的班级活动“C”开始,在它出现在屏幕上之后,从onCreate方法中提取捆绑包:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState.containsKey("fooBundle")){
        Bundle b = savedInstanceState.getBundle("fooBundle");
        int nVal = b.getInt("some_int_value");
        String sVal = b.getString("some_string_value");
        boolean blnVal = b.getBoolean("some_boolean_value");
        // Do whatever you have to do, put them into textview's etc.
    }
}

注意,如何进行检查以确保那里确实是一个捆绑包,如果没有,它是一个“空视图”,即没有数据预先填入字段。并反转从Bundle中提取值。

当您退出课程活动C时,它会返回到活动A

修改

OP坚持使用“两个”后退击键,这被认为是不必要的,因为表示活动已从堆栈中清除。

  

A - >乙

在上述代码中创建意图并运行之前,堆栈现在变为......

  

A - > ç

现在退回活动C,按后退键。

  

A