Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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 Android:在旋转后对活动调用finish()将重新启动活动_Java_Android - Fatal编程技术网

Java Android:在旋转后对活动调用finish()将重新启动活动

Java Android:在旋转后对活动调用finish()将重新启动活动,java,android,Java,Android,我有一个Android studio项目,包括3个活动,A1、A2和A3 A1启动A2,A2可以启动A3或返回A1。在A3中,您可以通过按两个不同的按钮返回A2或将一些更新的信息返回A1 我将数据从A3返回A1的想法是通过A2传递数据,然后在A2的onActivityResult方法中调用A2上的finish()。虽然我不知道这是最好的方法,但它似乎有效 现在,如果我不旋转设备,就不会有任何问题,信息会从A3返回A1。如果我旋转它一次,然后按任意一个按钮,它就会重新启动活动A3,我不知道为什么。

我有一个Android studio项目,包括3个活动,A1、A2和A3

A1启动A2,A2可以启动A3或返回A1。在A3中,您可以通过按两个不同的按钮返回A2或将一些更新的信息返回A1

我将数据从A3返回A1的想法是通过A2传递数据,然后在A2的onActivityResult方法中调用A2上的finish()。虽然我不知道这是最好的方法,但它似乎有效

现在,如果我不旋转设备,就不会有任何问题,信息会从A3返回A1。如果我旋转它一次,然后按任意一个按钮,它就会重新启动活动A3,我不知道为什么。将其旋转一次,然后再旋转回来也可以按预期工作

下面是一些代码片段

从A2开始A3

    infoIntent.setClass(this, A3.class);
    if(infoSet)
    {
        infoIntent.putExtra("tvName", name);
        infoIntent.putExtra("tvMemory", memory);
        infoIntent.putExtra("tvLaptop", laptop);
    }
    startActivityForResult(infoIntent, REQUEST_CODE_EDIT);
设置A3中的按钮侦听器

        btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            returnAndUpdateInfo(view);
        }
    });

    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setResult(RESULT_CANCELED, infoIntent);
            finish();
        }
    });
我一辈子都搞不明白为什么只有当屏幕旋转一次时,A3才会结束


A2中的onActivityResult甚至不会被调用。

当您旋转设备时。整个活动正在重新创建。所以我建议你使用不同的方法

使用一个全局类,并在该类中使用全局变量。当您想要传递数据时,只需将该数据分配给新的全局变量。让我给你看看

Public static String data = "";

from your Activity A1 
Global.data = "your data";
当您想使用该数据时,请使用

Global.data

我希望我能理解你的观点

使用片段简化你的生活。是的,你是对的,这是一个要求我们使用活动的练习。虽然我理解你对数据传递的解决方案,但这并不是我想要解决的问题。事实上,当我调用finish()时,旋转设备一次会导致它重新启动。不将其旋转或旋转回其原始方向不会导致此问题。