【问题标题】:how can i clear the 3 activities from one activity如何从一项活动中清除 3 项活动
【发布时间】:2012-05-15 18:07:02
【问题描述】:

我有 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

谢谢大家

【问题讨论】:

  • 不,那个标志对你没有帮助,你需要回到 1 和 2 还是你可以从堆栈中清除它们?
  • 如果用户还没有按表格 3 中的发送,那么我不想清除 1 和 2,但如果他按表格 3 中的发送,那么我的应用程序会将他移到我家,我想清除1 & 2 & 3,我该怎么做
  • 检查我的第二种方法stackoverflow.com/questions/10428197/…
  • 好的,我明白了。您可以使用静态标志来识别表单是否已发送。成功发送表单后,您可以更改标志值并根据标志值重置表单数据

标签: java android


【解决方案1】:

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

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

谢谢...!

【讨论】:

  • 是吗?因为现在我的sdk不工作,我应该在2小时后提交代码,所以我需要确保我的代码是正确的,谢谢你帮助我
【解决方案2】:

你可以像这样使用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"

干杯, 塞巴斯蒂安

【讨论】:

  • 你的意思是如果我完成填充活动1然后移动到2然后我应该完成活动1?我不想那样,我想要什么:当用户按下按钮发送活动 3 时,活动 1 & 2 & 3 将完成,
  • 不,我的意思是当你完成活动 3 时,它会调用活动 2 的 onActivityResult 方法(它仍然存在,因为你之前从未调用过finish() 方法),你可以调用finish() 方法。这会调用活动 1 的 onActivityResult 方法,您可以在其中调用 finish() 方法。我的回答做你想做的事:当你在活动 3 中开始你的 Home 意图时,活动 1 & 2 & 3 将完成。
  • 如果您使用 Eclipse,只需粘贴“onActivi”,然后按 ctrl+空格(自动缩进)。或者只是在你的活动中复制我上面的代码。
  • 但我不想在用户提交之前完成活动 1 和 2,代码是这样做的吗?
  • 是的,代码正在执行此操作(当然,如果您没有在其他地方调用 finish() 方法)。如果您正在进行活动 2,并且想要修改活动 1 中的某些数据,只需按返回按钮或在另一个按钮上应用返回操作,您的活动 1 仍然存在。
【解决方案3】:

试试这个..

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

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

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

【讨论】:

  • 还要清除activity 1 & 2 & 3 里面的数据吗?即使用户按下返回按钮?
  • 我的代码Intent i = new Intent(activity3.this, Home.class); startActivity(i); 应该用这个new Intent(getApplicationContext(), new NewActivityOrExistingActivityName.class); 替换它还是只是将intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 添加到我的代码中?
  • 在这两行之间添加 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  • 如果用户按下发送,那么我的应用程序会将用户移动到主页,但是当他按下返回时,我的应用程序会带着用户信息返回活动 3,这是我的问题
  • 我希望在用户按下发送活动 3 后,即使用户按下返回,动作 1 & 2 & 3 也将是干净的
【解决方案4】:
There are two different ways to do that.
  1. 您可以在完成活动后设置结果。这将像链一样工作。例如 1->2->3 假设您在活动 3 中有完成按钮以将结果发送到活动 1,那么您可以在完成按钮单击事件中从活动 3 设置结果()并通过调用完成()来完成您的活动。 在活动 2 中,您可以在 onActivityResult() 中接收您的数据,在那里您可以检查结果代码并保存数据,就像您可以从活动 2 到活动 1 一样,发送您的结果。

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

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

【讨论】:

  • 你能告诉我发送广播的代码是什么,我应该将它从活动 3 发送到活动 1,我如何在活动 1 中接收它,我应该把它放在哪里?在内部创建或在另一个函数中
  • 很抱歉打扰你,但我在课堂上的所有数据都来自第 1 章和第 2 章,我在第 3 章中调用它,那么我应该从 bundle 中获取的数据是什么
  • 当您从 1 移动到 2 和 2 到 3 时保存数据并将其传递给下一个活动。这样,您将拥有活动 3 中的所有数据,然后您就可以完成了。
  • 我将所有数据放在类中并调用对象我没有在 activitis 之间传递数据,它全部在类中,活动 1 和 2 填充类,活动 3 调用对象并显示用户信息他填了 1 和 2,那我怎么用你的代码
  • 您想向用户显示活动 3 中的所有数据
【解决方案5】:
.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent)

完成:) 谢谢大家,

【讨论】:

  • 如果可行,您必须接受 Rashmi 或 Dinesh 的回答,他们都向您推荐了好代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多