我知道这个问题已被问过很多次,但我尝试了很多解决方案都无济于事。啜泣啜泣。
我会尽量保持简单。我正在编写一个使用微调器并编辑文本以获取浮点数的应用程序。所以屏幕 A 有 4 个微调器和 4 个编辑文本。我使用下一步按钮打开屏幕 B
onClick(){
a.putExtras(sendScoreSoFar);
a.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(a);
}
屏幕 B 与 3 个微调器和 2 个编辑文本大致相同。我可以在保留用户输入的同时从 A 移动到 B 并返回 A,但是当我再次返回 B 时,B 会被重置。我需要保留输入,以便用户可以来回滑动以检查输入。我可以使用共享首选项,但需要在第一次加载时重置。
我尝试了清单中的各种行:
<activity
android:name="com.package.Screen2"
android:label="@string/app_name"
android:alwaysRetainTaskState="True"
android:launchMode="singleInstance">
>
<intent-filter>...
这是我创建和保存的实例状态代码。
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
setContentView(R.layout.screen2);
super.onCreate(savedInstanceState);
setUpVariables();
if (savedInstanceState != null) {
int a = savedInstanceState.getInt("weightlostorprev");
spinner1.setSelection(a);
int b = savedInstanceState.getInt("metricorimp");
spinner1.setSelection(b);
int c = savedInstanceState.getInt("acute");
spinner1.setSelection(c);
etBigWeight.setText(savedInstanceState.getString("bigweight"));
etSmallWeight.setText(savedInstanceState.getString("smallweight"));
}
gotBasket = getIntent().getExtras();
passedResults = gotBasket.getFloatArray("the data");
passedWeight = passedResults[5];
Toast c1 = Toast.makeText(Screen2.this, "on create run! new run = "
+ newRun, Toast.LENGTH_LONG);
c1.show();
// question.setText(gotBread);
}
//@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
int a = spinner1.getSelectedItemPosition();
savedInstanceState.putInt("weightlostorprev", a);
int b = spinner2.getSelectedItemPosition();
savedInstanceState.putInt("metricorimp", b);
int c = spinner1.getSelectedItemPosition();
savedInstanceState.putInt("acute", c);
savedInstanceState.putString("bigweight", etBigWeight.getText()
.toString());
savedInstanceState.putString("bigweight", etBigWeight.getText()
.toString());
}
//@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
int a = savedInstanceState.getInt("weightlostorprev");
spinner1.setSelection(a);
int b = savedInstanceState.getInt("metricorimp");
spinner1.setSelection(b);
int c = savedInstanceState.getInt("acute");
spinner1.setSelection(c);
etBigWeight.setText(savedInstanceState.getString("bigweight"));
etSmallWeight.setText(savedInstanceState.getString("smallweight"));
}
我知道有一个简单的解决方案,但我找不到它。提前致谢。
编辑据我所见,您无法将数据发送到 onResume 所以尽管给出的答案是正确的,但我通过删除所有共享首选项代码解决了问题,删除了对清单的更改: android:alwaysRetainTaskState="True" android:launchMode=" singleInstance"> 而不是试图保留活动,而是照常杀死它(使用后退按钮),只需发送微调器的值并使用 startactivityforresult 编辑捆绑中的文本。所以 screenA 开始 screenB 发送包 a,然后当 screenB 被返回按钮杀死时,它将包 b 发送回 screenA,然后当 screenA 现在启动 screenB 时,它发送包 a 和 b,并且 b 填充了包 b 中的值。可能没有人感兴趣,但我认为我还是提出了解决方案。如果有人愿意,我可以提供代码。
感谢您的回答,伙计们下次会看看您的选择。