切换活动而不丢失数据

时间:2015-02-04 20:46:37

标签: java android

我正在处理一项有两项活动的应用。 当我从一个活动转到另一个活动然后返回我丢失数据。 想像: 第一个活动在文本视图上显示随机数,该按钮单击时更改 第二个活动什么都不做,它只返回主活动按钮

*我知道这个应用程序毫无价值,但它比向我展示我的大型应用程序更容易......

所以你在textview上有一个随机数,我转到下一个活动然后返回主活动,textview丢失了数字并显示另一个。

问题是,如何在不丢失数据(随机数)的情况下返回活动? 我不想将它保存在数据库或共享优先级上,因为当在一个显示许多数据的大型应用程序中使用时,这不会很好...... Thx提前

编辑:

代码行动1:

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

代理行动2:

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

4 个答案:

答案 0 :(得分:2)

你的问题原因,因为

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

请从活动1中移除finish()并实施onActivityResult()

像,

Onclick(...){
      Intent intent = New intent (this, acttwo.class);
      StartActivityForResult(intent, 0); // Result to ensure about back track of proper activity
}

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

应该是,

// public clas ... oncreate ... of acttwo

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

注意:

将来可能会发生Android系统可能会因低内存问题而导致您的应用程序失效,因此最好在SharedPreferencesDatabase中保存您的数据和活动状态。

答案 1 :(得分:0)

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

  1. 使用Intents作为附加内容传递数据
  2. 使用Accepted Answer at Saving Activity state in Android
  3. 中描述的方法保存

答案 2 :(得分:0)

您可以在Activity中使用静态变量来保存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);
    }
}

答案 3 :(得分:-1)

您的TextView应该保留之前的数字。如果您在onResume()方法中设置这些值,则每次活动恢复时它们都会更改。如果您通过完成呼叫(同时呼叫B)终止您的活动,然后再次(从B)开始新的活动A,那么它将显示一个随机数

如果您必须执行我提到的任何一种方法,您可以将想要在意图中保留的值作为额外添加,将其传递给第二个活动,然后将其传回:

// 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中设置TextView(如果你正在开始新的活动,则设置onCreate。但是在这种情况下,检查一下,启动此活动的意图是否有额外的命名值 - 如果是,则显示它会生成一个新的随机数。)