gpt4 book ai didi

android - 暴露的下拉菜单不显示项目

转载 作者:行者123 更新时间:2023-12-05 00:03:38 25 4
gpt4 key购买 nike

Exposed Dropdown Menu用户选择和 fragment 转换后不显示项目。
以下是基本的 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>
并且, fragment 上声明的代码(在 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。但是,在导航到下一个 fragment 并返回到它之后,下拉菜单中只会显示预先选择的文本。
使用 navigation component 更改 fragment (诉 2.3.2)。

最佳答案

使用导航组件时, fragment 的 View 被破坏。 (也许并不总是,但它肯定会在你经历的某些时候发生)
我认为您只需添加一个条件即可使其工作:

if (savedInstanceState == null) {
dropdown.setText(items[0], false)
}
这样只有在不恢复 View 状态时才设置默认值。
否则,这只是像往常一样保存状态的问题。这是 documentation article如果你不确定我在说什么的话。它基本上相当于将以下代码添加到您的 fragment 中:
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 架构,您可以使用 SavedStateHandle 保存所选位置在您的 ViewModel 中,当它被更改时。

关于android - 暴露的下拉菜单不显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65959727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com