我正在尝试创建一个材料暴露的下拉菜单,该菜单在重新访问片段时重建。初次访问片段时,菜单已正确创建(它有助于创建计时器)。暴露的下拉菜单有秒、分钟、小时和天作为选项。当您重新访问该片段并且我重建下拉菜单时,只有之前选择的选项在那里。比如我选择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() 函数中遗漏了一些代码,因为它不相关。任何帮助将不胜感激。
将适配器的填充和赋值方法移动到onResume方法中。