【问题标题】:How to handle Spinners when screen orientation changes?屏幕方向改变时如何处理微调器?
【发布时间】:2018-02-03 20:27:20
【问题描述】:

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

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

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

我会根据要求或需要时提供代码。

谢谢

【问题讨论】:

    标签: android android-spinner android-lifecycle


    【解决方案1】:

    试试这个,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
        }
    }
    

    【讨论】:

    • 我在 onCreate 中获得了值/选择。但是,微调器值仍在恢复为默认值。可能是适配器的问题?
    • 我不会让你@singhnikhil
    • @thelastchief 你能展示你的尝试吗?在您设置选择之前,屏幕旋转上的数据是否可供适配器使用?
    【解决方案2】:

    在您的 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多