我在我的应用程序中有一个活动,它使用一些条件进行搜索,并有一些旋转小部件来选择它们。
我的问题是,当我的Android设备的定位发生变化时,活动就会重新启动,并且失去了在旋转器中选择的所有标准和搜索的结果。
我尝试过使用onSaveInstanceState(Bundle)保存数据,并在onCreate方法中恢复数据,我成功地获得了数据,但我的问题是,当方向改变和活动重新启动时,我需要再次将这些数据放在旋转器中。我已经测试了一些方法,但这是不可能的:
1.将保存在适配器加载的LinkedList的第一个字符串:(不工作)
if (savedInstanceState != null) {
list.add(0, stSaved); //stSaved is the string saved
}2.保存所选字符串的位置,并使用下一个旋转器的方法:(不工作)
if (savedInstanceState != null) {
spinner.setSelection(posSaved, true); //posSaved is the string's position to save
}3.另一种旋转方法:(不工作)
if (savedInstanceState != null) {
spinner.setPrompt(stSaved);
}此外,还有12个条件,因此有12个字符串可以保存,再加上包含搜索结果的列表,那么使用SharedPreferences比使用onSaveInstanceState(Bundle)更好。
PD1。我保存并正确获取所需的数据,但在活动重新启动时,默认情况下不能放入旋转器。PD2。我不能使用android:configChanges="orientation",因为这个活动有两个片段(条件和结果),而且不兼容。
我希望你能帮我,非常感谢。
发布于 2014-12-16 10:53:22
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(icicle);
bundle.putInt("selected_pos_spinnerX", spinnerX.getSelectedItemPosition());
}并恢复价值观:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code ...
//code to init spinner and load data ...
if(savedInstanceState!=null){
spinnerX.setSelection(savedInstanceState.getint("selected_pos_spinnerX"));
}
}关于搜索结果,您可以根据正在处理的数据结构和结果将它们存储在本地文件或应用程序首选项中。
您可以序列化搜索结果(如json),并将json字符串存储在文件中,解析它(如果恢复屏幕)并将其加载到结果视图中。
https://stackoverflow.com/questions/27486701
复制相似问题