暴露的下拉菜单不显示项目
Posted
技术标签:
【中文标题】暴露的下拉菜单不显示项目【英文标题】:Exposed Dropdown Menu not showing items 【发布时间】:2021-05-03 16:23:36 【问题描述】:Exposed Dropdown Menu 在用户选择和片段转换后不显示项目。
以下是基本的 xml 声明:
<com.google.android.material.textfield.TextInputLayout
...
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
<AutoCompleteTextView
....
android:id="@+id/dropdown"
android:dropDownHeight="300dp"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
并且,片段上声明的代码(在onViewCreated()
内):
val items = listOf("Material", "Design", "Components", "Android")
val adapter = ArrayAdapter(requireContext(), R.layout.item_menu, items)
dropdown.setAdapter(adapter)
dropdown.setText(items[0], false)
如here 所述,它在AutoCompleteTextView's
setText 方法(dropdown.setText("", false))上将过滤器参数设置为false。但是,在导航到下一个片段并返回到该片段后,下拉列表中只会显示预先选择的文本。
使用navigation component(v.2.3.2
)更改片段。
【问题讨论】:
我遇到了同样的问题。 【参考方案1】:片段的视图在使用导航组件时被破坏。 (也许并不总是,但它肯定会在你经历的某些时候发生)
我认为您可能只需添加一个条件即可使其工作:
if (savedInstanceState == null)
dropdown.setText(items[0], false)
这样只有在不恢复视图状态时才设置默认值。
否则这只是像往常一样保存状态的问题。如果您不确定我在说什么,这里有一个documentation article。它基本上相当于将以下代码添加到您的片段中:
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
val item = savedInstanceState?.getInt("selectedPos", 0) ?: 0
dropdown.setText(items[item], false)
override fun onSaveInstanceState(outState: Bundle)
super.onSaveInstanceState(outState)
outState.putInt("selectedPos", dropdown.getListSelection())
如果您使用 MVVM 架构,您可以在 ViewModel 中使用 SavedStateHandle
保存所选位置,当它发生更改时。
【讨论】:
很遗憾,您的代码中显示的解决方案都不起作用。 那我误解了你的问题。尽管如此,您必须适当地保存状态,因为导航组件会在它们被导航出时破坏片段,从而丢失视图状态。【参考方案2】:我遇到了同样的问题。我在 github 页面上搜索了问题。我发现这个https://github.com/material-components/material-components-android/issues/2012#issuecomment-808853621 现在可以解决了。它有效。
创建一个类似下面的扩展
fun AutoCompleteTextView.showDropdown(adapter: ArrayAdapter<String>?)
if(!TextUtils.isEmpty(this.text.toString()))
adapter?.filter?.filter(null)
然后点击下拉菜单
binding.quaters.setOnClickListener
binding.quaters.showDropdown(arrayAdapter)
这就是它应该工作的全部。这似乎是一个应该修复的错误。
【讨论】:
以上是关于暴露的下拉菜单不显示项目的主要内容,如果未能解决你的问题,请参考以下文章