屏幕方向改变时如何处理 Spinners?

How to handle Spinners when screen orientation changes?

我有两个微调器。在 onCreate 中,我为他们设置了监听器。在其他一些地方我填充它们。

现在我不确定在屏幕方向发生变化时处理这些微调器的最佳做法是什么。我应该以某种方式将所有值和选定项目存储在 sharedPreferences 中还是存储在 savedInstanceState 中?

如果可以,请以首选方式告诉我,并附上一些处理微调器的示例代码。这里的目标是在整个生命周期中保持值和选定项。

我会根据要求或需要包含代码。

谢谢

试试这个,onSaveInstanceState 用于保存您选择的微调器值的屏幕方向,根据我的选择,shared preference 不是保存选择的微调器值的好选择。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("mySpinner", mySpinner.getSelectedItemPosition());
    // do this for each or your Spinner
 }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // initialize all your visual fields        
    if (savedInstanceState != null) {
        mySpinner.setSelection(savedInstanceState.getInt("mySpinner", 0));
        // do this for each of your text views
    }
}

在您的 AndroidManifest 文件中添加 android:configChanges="orientation|screenSize",它将在方向更改时保持选择的微调器值。

像这样的用户微调器:

mSpinner = findViewById(R.id.spinner);

    ArrayList<String> stringArrayList = new ArrayList<>();

    for (int i = 0; i < 6; i++) {

        stringArrayList.add("List Item " + i);

    }

    ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, stringArrayList);
    spinner.setAdapter(arrayAdapter);