【问题标题】:Maintaining Spinner Dropdown state维持 Spinner Dropdown 状态
【发布时间】:2014-09-02 03:15:04
【问题描述】:

我的操作栏中有一个 Spinner,它只在 onCreateActionMode() 中初始化一次;

问题:当微调器下拉可见并且我尝试旋转屏幕时,方向更改后下拉状态不会保持。

我怎样才能保持状态,以便如果在纵向模式下微调器下拉菜单可见,那么在横向模式下方向更改后下拉菜单也应该可见。

另外让我知道我们检查下拉菜单在给定点是否可见的 API。还有一个 API 可以强制显示下拉菜单。

我还在 Manifest 文件中指定了 configChanges="orientation"。

【问题讨论】:

    标签: android android-actionbar android-spinner


    【解决方案1】:

    我找到了一个非常丑陋的解决方案(“动作”发生在 onConfigurationChanged 方法中):

    1. 在调用setContentView之前,检查下拉视图是否显示(*),如果是,则保存当前在微调器中选择的位置(@ 987654324@)。

    2. 在调用 setContentView 并设置微调器适配器后,如果在步骤 1 中显示了下拉视图,则通过在微调器上调用 performClick 来强制显示下拉视图:

      spinner.setSelection(pos);// this way we make sure that the same item
                                // remains selected after rotating the device
      spinner.performClick(); //show the dropdown view 
      

    (*) 检查下拉视图是否显示是比较棘手的部分。我还没有找到(还)让我知道是否显示下拉视图的方法,所以我必须执行以下操作:

    • 将微调器的按下状态保存在一个布尔变量中(例如,命名为 isClicked)。

    • 为微调器设置一个 onTouchListener 并在 onTouch 方法中将 isClicked 设置为 true(点击微调器时,dropdwon视图打开,因此 isClicked == true 表示显示下拉视图)。

    • 覆盖 onKeyDownonKeyUp 并按下后退按钮时,如果 isClicked 为真,则将其设置为假(我假设用 isClicked==true 按下意味着关闭下拉视图)。

    • 使用onConfigurationChanged方法中isClicked的值来检查下拉视图是否显示。

    就像我说的,这是一个丑陋的解决方案,但这是我迄今为止唯一能想到的解决方案。如果有人有其他想法,请发表。

    谦虚取自here

    还有其他解决方法,如下

    1. SO answer 1
    2. SO answer 2

    底线是您需要在打开微调器时捕获status(一些布尔变量) 以及在活动时configChange 需要从status 初始化微调器状态

    希望对你有帮助!!

    【讨论】:

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