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