我的情况是我有三步注册过程。每个步骤都包含在它自己的活动中 - 称为A,B和C.只有当我到达第三步结束时,我才能可靠地验证其中一个输入(以及我使用PHPMailer向其发送确认的电子邮件地址) 。如果这出现错误,我想一直回到A,这是输入电子邮件地址的地方。
只需调用一个Intent即可。但是,我想保留用户最初输入的输入值,这样他们就不必再输入它们。从理论上讲,最简单的方法是两次调用finish()
。但这不起作用,因为一旦调用它将控制权转回B并且第二次调用永远不会发生。
有一种简单的方法可以做到这一点,还是我必须调用Intent然后以某种方式通过另一种方法填充字段?谢谢!
答案 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