维持Spinner下拉状态

时间:2014-09-02 03:15:05

标签: android android-actionbar android-spinner

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

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

如何保持状态,以便在纵向模式下可以看到微调器下拉列表,然后在横向模式下更改方向后,下拉列应该可见。

另请告诉我们用于检查下拉列表在给定点是否可见的API。也是一个强有力地显示下拉的API。

我还在我的清单文件中指定了configChanges =“orientation”。

1 个答案:

答案 0 :(得分:0)

我找到了一个非常难看的解决方案('动作'发生在 onConfigurationChanged 方法):

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

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

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

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

    • 为微调器和 onTouch 方法集 isClicked 设置 onTouchListener 为true(当点击微调器时,dropdwon视图打开,因此 isClicked == true 表示会显示下拉视图。

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

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

    就像我说的那样,这是一个难看的修复,但它是迄今为止我唯一能想到的。如果有人有其他想法,请发布。

    谦卑地摘自here

    还有其他解决方案如下

    1. SO answer 1
    2. SO answer 2
    3. 底线是你需要在微调器打开时捕获spinner.setSelection(pos);// this way we make sure that the same item // remains selected after rotating the device spinner.performClick(); //show the dropdown view 一些布尔变量),并且当活动status需要初始化微调器状态时configChange

      希望它有所帮助!!