我正在处理一项有两项活动的应用。 当我从一个活动转到另一个活动然后返回我丢失数据。 想像: 第一个活动在文本视图上显示随机数,该按钮单击时更改 第二个活动什么都不做,它只返回主活动按钮
*我知道这个应用程序毫无价值,但它比向我展示我的大型应用程序更容易......
所以你在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 ();
}
答案 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系统可能会因低内存问题而导致您的应用程序失效,因此最好在SharedPreferences
或Database
中保存您的数据和活动状态。
答案 1 :(得分:0)
您需要以某种方式保存数据。不使用DB或其他用于在Android中保存数据的经典方法(共享首选项),正如我所看到的,您有两种选择:
答案 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。但是在这种情况下,检查一下,启动此活动的意图是否有额外的命名值 - 如果是,则显示它会生成一个新的随机数。)