方向更改时保存数据/默认情况下在Spinner中写入字符串

时间:2014-12-15 14:52:26

标签: android android-spinner android-orientation

我的应用程序中有一个活动,它使用某些条件进行搜索,并且有一些微调器小部件可以选择它们。

我的问题是当Android设备的方向发生变化时,活动会重新启动,并且会丢失在Spinners中选择的所有条件以及从搜索中获得的结果。

我尝试使用onSaveInstanceState(Bundle)保存数据并在onCreate方法中恢复,并且我成功获取数据但我的问题是我需要在方向更改并且活动重新启动时再次将此数据放入Spinner中... I已经测试了一些方法,但它是不可能的:

1。将保存在LinkList首先保存的字符串放在适配器上:(不工作)

if (savedInstanceState != null) {
          list.add(0, stSaved); //stSaved is the string saved
}

2。保存所选字符串的位置,并使用下一个Spinner的方法:(不工作)

if (savedInstanceState != null) {
          spinner.setSelection(posSaved, true); //posSaved is the string's position to save
}

3。另一个Spinner的方法:(不工作)

if (savedInstanceState != null) {
          spinner.setPrompt(stSaved);
}

此外,有12个条件,因此可以保存12个字符串,加上搜索结果的列表,然后,最好使用SharedPreferences而不是onSaveInstanceState(Bundle)

PD1。我保存并获得所需的正确数据,但是当活动重新启动时,我无法在默认情况下放入Spinner。 PD2。我无法使用android:configChanges="orientation",因为此活动有两个片段(条件和结果)且不兼容。

我希望你能帮助我,非常感谢。

1 个答案:

答案 0 :(得分:0)

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字符串存储在文件中,解析它(如果恢复屏幕) 并在结果视图中加载它。