我可以强制微调器的下拉视图在方向更改时保持可见吗?

Ade*_*Ade 4 android spinner drop-down-menu

我不知道标题中是否清楚我的问题是什么,所以这里有一些重现的步骤(假设你有一个带有微调器的布局):

  1. 点击微调框>下拉列表打开.
  2. 将设备从纵向旋转到横向(反之亦然)>列表正在关闭.

我的问题是我希望在旋转设备后保持列表打开.我知道如果覆盖onConfigurationChanged这通常是可能的,但我已经为横向模式定义了不同的布局,所以在我的onConfigurationChanged方法中,我必须调用setContentView并为景观微调器设置适配器,这将关闭在中打开的下拉视图肖像模式.

有没有办法阻止下拉列表关闭或者可能在旋转设备后强制显示下拉列表?

Ade*_*Ade 6

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

  1. 在调用setContentView之前,检查下拉视图是否显示(*),如果是,则保存当前在spinner(int pos = spinner.getSelectedItemPosition())中选择的位置.

  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 
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 覆盖onKeyDownonKeyUp,当按下后退按钮时,如果isClicked为true,则将其设置为false(我假设按下isClicked == true表示关闭下拉视图).

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

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