Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.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 - Fatal编程技术网

Java 在活动之间切换而不丢失数据

Java 在活动之间切换而不丢失数据,java,android,Java,Android,我正在开发一个有两个活动的应用程序。 当我从一个活动转到另一个活动,然后返回时,我会丢失数据。 想象: 第一个活动在文本视图上显示一个随机数,该随机数在单击按钮时发生变化 第二个活动不执行任何操作,它只返回到主活动按钮 *我知道这个应用程序一文不值,但它比向你展示我的大型应用程序更容易 因此,您在textview上有一个随机数,我转到下一个活动,然后返回到主活动,textview将丢失该数字并显示另一个 问题是,如何在不丢失数据(随机数)的情况下返回活动? 我不想将它保存在数据库或SharedR

我正在开发一个有两个活动的应用程序。 当我从一个活动转到另一个活动,然后返回时,我会丢失数据。 想象: 第一个活动在文本视图上显示一个随机数,该随机数在单击按钮时发生变化 第二个活动不执行任何操作,它只返回到主活动按钮

*我知道这个应用程序一文不值,但它比向你展示我的大型应用程序更容易

因此,您在textview上有一个随机数,我转到下一个活动,然后返回到主活动,textview将丢失该数字并显示另一个

问题是,如何在不丢失数据(随机数)的情况下返回活动? 我不想将它保存在数据库或SharedRefers上,因为在显示大量数据的大型应用程序中使用时,这将不好。。。 提前Thx

编辑:

act1的代码:

//public clas... oncreate...
Onclick(...){
      Intent intent = New intent (this,      acttwo.class);
      StartActivity (intent);
      Finish ();
}
act2的代码:

//public clas... oncreate...
Onclick(...){
     Intent intent = New intent(this,    actone.class);
     StartActivity (intent);
     Finish ();
}

您需要以某种方式保存数据。在我看来,如果不使用DB或其他用于在Android中保存数据的经典方法(共享首选项),您将有两个选择:

  • 以附加的方式传递数据
  • 使用中描述的方法保存

  • 您的TextView应该保留您以前拥有的号码。如果在onResume()方法中设置这些值,则每次活动恢复时它们都会更改。如果您通过调用finish(同时调用B)终止活动,然后再次启动新活动a(从B开始),那么它将显示一个随机数

    如果您必须执行我提到的任何一种方法,您可以添加希望在意图中持久化的值作为额外值,将其传递给第二个活动,然后像这样传回:

    // Start activity B and pass the value you want to save in there
    Intent A = new Intent(this, ActivityB.class);
    A.putExtra("value", number);
    
    // Start activity A from B and pass the value you saved in there
    Intent B = new Intent(this, ActivityA.class);
    B.putExtra("value", getIntent().getExtra("value");
    

    然后检索数字并在您的onResume中设置文本视图(如果您正在启动一个新的活动,则设置onCreate。但在这种情况下,请检查启动此活动的意图是否有一个额外的命名值-如果是,则显示它,否则将生成一个新的随机数)。

    您的问题原因是:

    启动活动2时,您正在活动1中调用
    finish()

    因此,从活动1中删除
    finish()
    。并在ActivityResult()上实现

    现在,活动2只需调用
    finish()
    无需再次调用启动活动1,因为活动1已经在应用程序任务的后堆栈中

    所以应该是,

    //公共课。。。一旦创建。。。第二幕

    Onclick(...){
         finish(); // We are just finishing Activity 2 not starting Activity 1 again 
    }
    
    注意:


    将来可能会发生这样的情况,Android系统可能会因为内存不足而终止您的应用程序,因此,最好将数据和活动状态保存在
    SharedReferences
    Database

    中,您可以在活动中使用静态变量来保存TextView要保存的任意随机数,并将其文本设置为每次onResume()调用。有点像

    class MyActivity extends Activity {
        private static int randomNumber;
        private TextView myTextView;
    
        ...
    
        @Override
        public void onResume(Bundle b){
            super.onResume(b);
            myTextView.setText(randomNumber);
        }
    }
    

    很抱歉,这是一个用Java编写的android应用程序。除非您在onResume()或类似的生命周期组件中分配随机数,否则您的TextView没有理由不显示以前分配给它的数字。如果你是,那么你应该只在onCreate中这样做,这样它在启动时只会发生一次。发生的是,一旦我返回,活动就会重新开始。不需要提及,这是一个用Java编写的android应用程序,这就是标记的用途;)在开始第二个活动之前,您是否完成了第一个活动?向我们展示启动活动2的代码以及返回活动1的代码。。我解释这是假设一个数字,因为你说了一个数字。根据您的使用情况,对于数据流(如照片、视频),您可以将其添加为可序列化的额外数据。如果它是一个常规对象,那么您将把它们添加为一个可打包的额外对象(或者,如果可以的话,您可以使该对象实现可序列化)。原理是一样的。我只是使用了一个基本的额外命令。而您的问题来自调用finish()-我解释说,bitI称为finish,因为当我按下背面时,上一个活动显示,然后当我再次按下时,上一个活动显示…我建议您浏览android开发者网站,该网站描述了如何维护活动状态和安卓活动生命周期。
    class MyActivity extends Activity {
        private static int randomNumber;
        private TextView myTextView;
    
        ...
    
        @Override
        public void onResume(Bundle b){
            super.onResume(b);
            myTextView.setText(randomNumber);
        }
    }