Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个活动中清除3个活动_Java_Android - Fatal编程技术网

Java 如何从一个活动中清除3个活动

Java 如何从一个活动中清除3个活动,java,android,Java,Android,我有3项活动(表1、表2、表3) 在用户填写表单3并发送之后,我想从活动(1&2&3)中删除信息,但在活动3中发送之后 Intent temp_intent = new Intent(); temp_intent.setAction("form_filled"); sendBroadcast(temp_intent); Intent intent = new Intent(getApplicationContext(), activity2.class); class

我有3项活动(表1、表2、表3) 在用户填写表单3并发送之后,我想从活动(1&2&3)中删除信息,但在活动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
(我的意思是,如果用户在发送后单击“上一步”,我不希望他在表格1、2和3中找到他的信息

.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent);
这是否允许我的1&2&3活动在活动3之后单击“上一步”时没有用户数据? 你能帮帮我吗? ============================编辑===============

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

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

谢谢大家

请尝试以下代码以解决您的问题:

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

谢谢…!

请尝试以下代码以解决您的问题:

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

谢谢…!

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

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

Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, 0);
在activity 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”

干杯,
Sebastien

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

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

Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, 0);
在activity 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”

干杯, 塞巴斯蒂安,试试这个

在上次发送活动中,如果要启动另一个活动或现有活动,请添加此活动

完成(); Intent Intent=newintent(getApplicationContext(),new-NewActivityOrExistingActivityName.class); intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP); 星触觉(意向)

这将清除上一个活动堆栈中的所有活动。请尝试此操作

There are two different ways to do that.
在上次发送活动中,如果要启动另一个活动或现有活动,请添加此活动

完成(); Intent Intent=newintent(getApplicationContext(),new-NewActivityOrExistingActivityName.class); intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP); 星触觉(意向)

这将清除上一个活动堆栈中的所有活动

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

    setResult(); onActivityResult()

  • 对于第二种方法,首先您必须在清单文件中为活动1设置一个top,当您保存来自活动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
    
    希望它能奏效。。 抱歉格式化…:)

  • 您可以在完成活动后设置结果。这将像链条一样工作。例如 1->2->3 假设您在活动3中使用“完成”按钮将结果发送到活动1,那么您可以在“完成”按钮单击事件中的活动3中设置结果(),并通过调用finish()来完成活动。 在活动2中,您可以在onActivityResult()中接收数据,在那里您可以检查结果代码并保存数据,就像从活动2到活动1一样,发送结果

    setResult(); onActivityResult()

  • 对于第二种方法,首先您必须在清单文件中为活动1设置一个top,当您保存来自活动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
    
    希望它能奏效。。 抱歉格式化…:)

    完成:) 谢谢大家,

    完成:)
    谢谢大家,

    不,该标志不会真正帮助您,您需要返回到1和2,还是可以从堆栈中清除它们?如果用户尚未在表单3中按send,则我不想清除1和2,但如果他在表单3中按send,则我的应用程序会将他移到我家,我想清除1和2和3,我该怎么做我的第二种方法好的,我明白。您可以使用静态标志来标识表单是否已发送。成功发送表单后,您可以更改标志值并根据标志值重置表单数据否该标志不会真正帮助您,是否需要返回1,2或者你能从堆栈中清除它们吗?如果用户在表单3中还没有按send,那么我不想清除1和2,但是如果他在表单3中按send,那么我的应用程序会将他移动到我家,我想清除1和2和3,我该如何做我的第二种方法?好的,我理解。您可以使用静态标志来标识表单是否已发送。成功发送表单后,您可以更改标志值并根据标志值重置表单数据。您可以告诉我,我应该从活动3发送到活动1的发送广播代码是什么,我如何在活动1中接收它,以及我应该将它放在哪里?我很抱歉打扰您,我的所有数据都来自act1和Act2,我在Act3中称之为act1和Act2,所以当您从1移动到2和从2移动到3时,我应该从Bundle中获取哪些数据