Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 完成,重新加载活动_Java_Android_Android Activity - Fatal编程技术网

Java 完成,重新加载活动

Java 完成,重新加载活动,java,android,android-activity,Java,Android,Android Activity,我有一个应用程序,其中活动A允许设置一些选项并开始(单击按钮后)活动B。用户可以在B中执行某些操作,完成后,他可以选择(单选按钮): 重复-这意味着B活动将使用相同的选项(取自A)再次运行 新建-这意味着应用程序完成B活动并返回A,用户可以再次设置选项并再次启动B 结束-它从应用程序中退出(我想它应该先完成B,然后完成一个活动) 首先,我是这样做的: Intent intent = getIntent(); finish(); startActiv

我有一个应用程序,其中活动A允许设置一些选项并开始(单击按钮后)活动B。用户可以在B中执行某些操作,完成后,他可以选择(单选按钮):

  • 重复-这意味着B活动将使用相同的选项(取自A)再次运行
  • 新建-这意味着应用程序完成B活动并返回A,用户可以再次设置选项并再次启动B
  • 结束-它从应用程序中退出(我想它应该先完成B,然后完成一个活动)
  • 首先,我是这样做的:

            Intent intent = getIntent();
            finish();
            startActivity(intent);
    
    我可以使用的另一种方法是清除此活动中的所有参数,但上面的方法更快

    第二个是
    finish()


    第三个是最大的问题,我不知道如何解决这个问题。我试过使用
    startActivityForResult()
    onActivityResult()
    setResult()
    ,但我发现不可能根据所选的单选按钮设置不同的结果

    我发现的另一种方法是

    public static void closeAllBelowActivities(Activity current) {
    boolean flag = true;
    Activity below = current.getParent();
    if (below == null)
        return;
    System.out.println("Below Parent: " + below.getClass());
    while (flag) {
        Activity temp = below;
        try {
            below = temp.getParent();
            temp.finish();
        } catch (Exception e) {
            flag = false;
        }
    }
    }
    

    但我不知道如何投入当前的活动


    你能帮我一下吗?

    “我发现不可能根据所选的单选按钮设置不同的结果”我并不清楚。无论如何,我建议您我将要做的事情:活动A使用startActivityForResult()启动活动B,并等待来自B的捆绑包。当您从B到A构建退出函数时,请使用您的结果创建一个捆绑包。在A中,您将分析来自B的包并决定如何处理。如果要退出,请调用finish()

    编辑:好,这可能是您的情况:

    活动A:

        public class XY extends Activity { 
        // you need that as a flag to go back and forth:
               protected static final int SUB_ACTIVITY_REQUEST_CODE_04 = 5337; // choose the number you want...
        int result_from_B; // I usually use an int, choose as you want....
        static final String KEY_FROM_B = "mKey";
        @Override 
          protected void onActivityResult(int result,int resultCode,Intent data) {
            super.onActivityResult(result, resultCode, data);
        if (result == SUB_ACTIVITY_REQUEST_CODE_04) {
                if (data!=null){
                    Bundle extras = data.getExtras();
                    result_from_B = extras.getInt(XY.KEY_FROM_B);
    if (result_from_B==1) {
    // do what you want
    } else {
    // do somthing else...
    }
    }
    
    要调用活动B,请使用以下命令:

    Intent i = new Intent(this, 
                        ActB.class);
                this.startActivityForResult(i,SUB_ACTIVITY_REQUEST_CODE_04);
    
    在活动B中:

    public class ActB extends Activity{ 
        protected final int SUCCESS_RETURN_CODE = 1; // you need it to come back
    int result; // this is the result to give to activity A
    }
    // in the function to build the output:
    // I suppose you have already put something in result:
    Bundle bundle = new Bundle();
                bundle.putInt(XY.KEY_FORM_B, result);
                Intent mIntent = new Intent();
                mIntent.putExtras(bundle);
                ActB.this.setResult(SUCCESS_RETURN_CODE,mIntent);
                finish(); 
    
    这是基本的。您还可以来回管理布尔值、数组以及所有您想要的内容(通过一个捆绑包)。把它捆起来,然后走:)
    不要忘记在清单中声明您的类(活动),否则它将引发异常运行时。

    我不太清楚“我看到不可能根据所选的RadioButton设置不同的结果”。无论如何,我建议您我将要做的事情:活动A使用startActivityForResult()启动活动B,并等待来自B的捆绑包。当您从B到A构建退出函数时,请使用您的结果创建一个捆绑包。在A中,您将分析来自B的包并决定如何处理。如果要退出,请调用finish()

    编辑:好,这可能是您的情况:

    活动A:

        public class XY extends Activity { 
        // you need that as a flag to go back and forth:
               protected static final int SUB_ACTIVITY_REQUEST_CODE_04 = 5337; // choose the number you want...
        int result_from_B; // I usually use an int, choose as you want....
        static final String KEY_FROM_B = "mKey";
        @Override 
          protected void onActivityResult(int result,int resultCode,Intent data) {
            super.onActivityResult(result, resultCode, data);
        if (result == SUB_ACTIVITY_REQUEST_CODE_04) {
                if (data!=null){
                    Bundle extras = data.getExtras();
                    result_from_B = extras.getInt(XY.KEY_FROM_B);
    if (result_from_B==1) {
    // do what you want
    } else {
    // do somthing else...
    }
    }
    
    要调用活动B,请使用以下命令:

    Intent i = new Intent(this, 
                        ActB.class);
                this.startActivityForResult(i,SUB_ACTIVITY_REQUEST_CODE_04);
    
    在活动B中:

    public class ActB extends Activity{ 
        protected final int SUCCESS_RETURN_CODE = 1; // you need it to come back
    int result; // this is the result to give to activity A
    }
    // in the function to build the output:
    // I suppose you have already put something in result:
    Bundle bundle = new Bundle();
                bundle.putInt(XY.KEY_FORM_B, result);
                Intent mIntent = new Intent();
                mIntent.putExtras(bundle);
                ActB.this.setResult(SUCCESS_RETURN_CODE,mIntent);
                finish(); 
    
    这是基本的。您还可以来回管理布尔值、数组以及所有您想要的内容(通过一个捆绑包)。把它捆起来,然后走:)
    不要忘记在清单中声明您的类(活动),否则它将引发异常运行时。

    首先,您需要跟踪用于调用B的
    意图。
    尝试
    putExtra()
    方法的意图B。您还可以将所有内容打包成一个
    并使用
    getExtras()
    还原它(如果我没有记错的话,这就是方法名称)。在B上时,读取用于调用它的意图并保存参数。您还需要启动tractivityforresult(B)以使以下各项正常工作

    重复-这意味着B活动将使用相同的选项再次运行 (摘自A),

    在本例中,您可能希望再次使用标志从B调用活动B。我假设您不希望有两个B实例。否则,就不要使用该标志

    将从意图(A)收到的
    捆绑包再次放入,并在
    onNewIntent()
    方法中捕获它(如果使用单顶部)(或者正常情况下,onCreate,如果不是单顶部)。它是这样的:B->B onPause()->B onNewIntent()->B onResume()

    新建-表示应用程序完成B活动并返回A, 用户可以再次设置选项并再次启动B

    根据您想要的确切行为,您可以调用with
    标志\u活动\u重新排序\u到\u前台
    。在这种情况下,您的结果是A在前景中,B在背景中(按back将返回到B)

    或者,如果您不再需要B,而想返回A,则可以调用finish()

    结束-它从应用程序中退出(我想它应该完成B和 然后是一项活动)

    对B不执行任何操作,将RESULT()设置为类似“RESULT\u FINISH\u EVERYTHING”的值,并且在处理A中的结果时(覆盖“onActivityResult()”,IIRC),也完成活动A


    但我发现不可能根据具体情况设定不同的结果 选定的单选按钮

    您可以根据单选按钮中选中的thw按钮设置结果()。您可以将侦听器设置为单选组,并读取选定的按钮。如果需要对eadch单个单选按钮执行操作,请参见
    RadioGroup.OnCheckedChangeListener
    View.OnClickListener

    真的,不太复杂。这取决于你想要什么。如果你愿意,我可以澄清这一切


    祝你好运

    首先,您需要跟踪用于调用B的
    Intent
    。尝试Intent to B的
    putExtra()
    方法。您还可以将所有内容打包到
    包中
    ,并使用
    getExtras()
    还原它(如果我没有记错,这就是方法名称)。在B上时,读取用于调用它的意图并保存参数。您还需要启动tractivityforresult(B)以使以下各项正常工作

    重复-这意味着B活动将使用相同的选项再次运行 (摘自A),

    在本例中,您可能希望再次使用标志从B调用活动B。我假设您不希望有两个B实例。否则,就不要使用该标志

    将从意图(A)收到的
    捆绑包再次放入,并在
    onNewIntent()
    方法中捕获它(如果使用单顶部)(或者正常情况下,onCreate,如果不是单顶部)。它是这样的:B->B onPause()->B onNewIntent()->B onResume(