0

我有 3 个活动(表格 1 ,2 ,3 ),在用户填写表格 3 并发送后,我想从活动(1 & 2 & 3)中删除信息,但在活动 3 中发送后

(我的意思是如果用户在发送后点击返回,我不想让他在表格 1 & 2 & 3 中找到他的信息

.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent);

当他在活动 3 之后单击返回时,这是否让我的 1 & 2 & 3 活动没有用户数据?你能帮我么?===================编辑===============

有人告诉我这个但我不明白,你能帮我怎么做吗

pass a reference to the previous forms in the last one and call clear on any element

谢谢你们

4

5 回答 5

1

试试下面的代码来解决你的问题:

     Intent homeScreen = new Intent(getApplicationContext(), Home.class);
     homeScreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(homeScreen);

谢谢...!

于 2012-05-07T08:10:29.797 回答
1

您可以像这样使用 Activity 类的 onActivityResult 方法:

在活动 1 中,使用以下代码开始活动 2:

Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, 0);

并且在活动 1 中重写 onActivityResult 方法,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == 20) {
        // Activity 2 is finish, so finish activity 1
        finish();
    }
}

在活动 2 中,执行以下操作:

Intent intent = new Intent(this, Activity3.class);
startActivityForResult(intent, 0);

有了这个:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == 20) {
        // Activity 3 is finish, so finish activity 2
        setResult(20);
        finish();
    }
}

在活动 3 中,当用户提交您的表单时,请使用以下代码:

Intent intent = new Intent(this, Home.class);
startActivity(intent);
setResult(20);
finish();

PS:我建议您不要使用 getApplicationContext() 而是使用“this”或“Activity1.this”

干杯,塞巴斯蒂安

于 2012-05-07T08:40:27.347 回答
1

试试这个。。

在您上次发送的活动中,如果您想开始另一个活动或现有活动,请添加此

结束(); Intent intent = new Intent(getApplicationContext(), new NewActivityOrExistingActivityName.class); 意图.addFlags(意图.FLAG_ACTIVITY_CLEAR_TOP);开始活动(意图);

这将清除您之前的活动堆栈中的所有活动

于 2012-05-07T08:43:13.100 回答
1
There are two different ways to do that.
  1. 您可以在完成活动后设置结果。这将像链一样工作。例如 1->2->3 假设您在活动 3 中有完成按钮以将结果发送到活动 1,那么您可以在完成按钮单击事件中从活动 3 设置结果()并通过调用完成()来完成您的活动。在活动 2 中,您可以在 onActivityResult() 中接收数据,在那里您可以检查结果代码并保存数据,就像您可以从活动 2 到活动 1 一样,发送您的结果。

    设置结果();onActivityResult();

  2. 对于第二种方法,首先您必须在清单文件中为您的活动 1 设置单一顶部,当您从 3 中保存所有数据时,您最终将返回其中。

            android:launchMode="singleTop"
    
          from your activity 3 send broadcast to activity 1.
          to finish all your activity which you have opened after 1 you can use your code.
    
    
     Intent intent = new Intent(getApplicationContext(), Home.class);
     intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(intent);
    

// 这是你需要在开始你的第一个表单活动之前写的,我认为你的情况是在开始活动 1 之前。

BroadcastReceiver form_filled = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String received_action = intent.getAction();

        if (received_action.equals("form_filled")) {
            Bundle bundle = intent.getExtras();
            // GET ALL DATA FROM BUNDLE.
        }
    }
};
registerReceiver(form_filled, new IntentFilter("form_filled"));

// 这是您在完成活动之前必须做的事情 3

   Intent temp_intent = new Intent();
    temp_intent.setAction("form_filled");
    sendBroadcast(temp_intent);

 Intent intent = new Intent(getApplicationContext(), activity2.class);
 class_obj_class_name class_obj = new class_obj_class_name(); // FILL YOUR DATA IN CLASS OBJ
 intent.putExtra("class_obj", class_obj); //class_obj IS YOUR CLASS OBJECT IN WHICH YOUR INFORMATION SAVED.
 startActivity(intent);

 // IN ACTIVITY 2 ONCREATE
 class_obj = (class_obj_class_name)intent.getSerializableExtra("class_obj");
 // SAME YOU CAN USE TO PASS DATA IN activity3

希望它会工作..抱歉格式化... :)

于 2012-05-07T08:55:38.887 回答
0
.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent)

完成:) 谢谢大家,

于 2012-05-08T07:09:48.217 回答