Android - Material Exposed Dropdown Menu options not populating

问题描述 投票:0回答:1

我正在尝试创建一个材料暴露的下拉菜单,该菜单在重新访问片段时重建。初次访问片段时,菜单已正确创建(它有助于创建计时器)。暴露的下拉菜单有秒、分钟、小时和天作为选项。当您重新访问该片段并且我重建下拉菜单时,只有之前选择的选项在那里。比如我选择seconds, left the fragment, and come back,只有seconds是我可以选择的一个选项。分钟、小时和天都不是选项。这是我在您第一次访问该片段时构建暴露的下拉菜单的方式(这再次按预期工作):

            val index = stepNumber - 1
        val ctx = ContextThemeWrapper(activity, R.style.timeUnitsMenu)
        val newView = LayoutInflater.from(ctx)
            .inflate(R.layout.timer, null)
        newView.findViewById<ImageButton>(R.id.delete_timer).setOnClickListener { view -> deleteStep(view) }
        stepsContainer = currentView.findViewById(R.id.recipe_steps_container)
        val timerContainer = newView.findViewById<LinearLayout>(R.id.timer_settings_container)
        val timeUnitsMenu = newView.findViewById<AutoCompleteTextView>(R.id.time_units_menu)
        val timer : LinearLayout = newView.findViewById(R.id.timer_field_layout)
        val timeUnits = resources.getStringArray(R.array.time_units)
        val arrayAdapter = ArrayAdapter(requireContext(), R.layout.dropdown_menu_item, timeUnits)
        timeUnitsMenu.setAdapter(arrayAdapter)
        timeUnitsMenu.addTextChangedListener { createTimerFields(timerContainer, timeUnitsMenu.text.toString(), index) }
        timeUnitsMenu.setText(getString(R.string.minutes), false)
        stepsContainer.addView(timer, stepNumber - 1)
        stepNumber++

这是在

onCreateView()
中不起作用的版本:

for (i in 0 until stepsList.size) {
    if (stepsList[i] is MutableList<*>) {
        val list = stepsList[i] as MutableList<*>
        val ctx = ContextThemeWrapper(activity, R.style.timeUnitsMenu)
        val timerLayout = LayoutInflater.from(ctx).inflate(R.layout.timer, null)
        timerLayout.findViewById<ImageButton>(R.id.delete_timer).setOnClickListener { timerView -> deleteStep(timerView) }
        val timerContainer = timerLayout.findViewById<LinearLayout>(R.id.timer_settings_container)
        val timeUnitsMenu = timerLayout.findViewById<AutoCompleteTextView>(R.id.time_units_menu)
        val timeUnits = resources.getStringArray(R.array.time_units)
        val arrayAdapter = ArrayAdapter(timerLayout.context, R.layout.dropdown_menu_item, timeUnits)
        println("${arrayAdapter.getItem(0)} ${arrayAdapter.getItem(1)} ${arrayAdapter.getItem(2)} ${arrayAdapter.getItem(3)}")
        timeUnitsMenu.setAdapter(arrayAdapter)
        timeUnitsMenu.addTextChangedListener { restoreTimerFields(timerContainer, i) }
        val timeUnitsList = ArrayList(listOf(*resources.getStringArray(R.array.time_units)))
        timeUnitsMenu.setText(timeUnitsList[list.size - 1], false)
        stepsContainer.addView(timerLayout, i)
    }
}

请注意,我从 onCreateView() 函数中遗漏了一些代码,因为它不相关。任何帮助将不胜感激。

android kotlin android-fragments android-arrayadapter material-components-android
1个回答
0
投票

将适配器的填充和赋值方法移动到onResume方法中。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.