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

时间:2010-11-23 09:18:03

标签: android drop-down-menu spinner

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

  1. 点击微调器>下拉列表打开。
  2. 将设备从纵向旋转到横向(反之亦然)>名单即将结束。
  3. 我的问题是我希望在旋转设备后保持列表打开。我知道这通常可以覆盖 onConfigurationChanged ,但我已经为横向模式定义了不同的布局,所以在我的onConfigurationChanged方法中我必须调用 setContentView 并设置适配器用于横向微调器,它关闭以纵向模式打开的下拉视图。

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

2 个答案:

答案 0 :(得分:6)

我发现了一个非常难看的解决方案(“动作”发生在 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 的值来检查是否显示了下拉视图。

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

答案 1 :(得分:0)

默认情况下,从纵向切换到横向的行为是重新启动您的活动。因此,您可以将微调器状态保存到某个位置,例如将其保存到SharedPreferences并在重新启动活动时读取它(在onCreate()或onResume()方法中。