Я создаю пользовательское приложение для клавиатуры, которое использует InputMethodService
.Я заметил что-то очень странное.
Если я назову mainview.tabRecyclerView.adapter.notifyDataSetChanged()
(mainview.tabRecycler
- это представление переработчика, на которое я могу сослаться так из-за расширений Kotlin) внутри переопределенного метода onCreateInputView
, тогда ничего не произойдет.
Вот пример, где ничего не происходит:
override fun onCreateInputView(): View {
mainview = layoutInflater.inflate(R.layout.keyboardmain, null)
//Insert code that manipulates the variable called tabs, which is just a List
mainview.tabRecyclerView.adapter = TabAdapter(tabs, this)
mainview.tabRecyclerView.adapter.notifyDataSetChanged()
return mainview
}
Однако, если я вызову mainview.tabRecyclerView.adapter.notifyDataSetChanged()
из сопрограммы с задержкой не менее 1 миллисекунды, то recyclerview
"tabRecyclerView "покажет представления.
Вот пример:
override fun onCreateInputView(): View {
mainview = layoutInflater.inflate(R.layout.keyboardmain, null)
//Insert code that manipulates the variable called tabs, which is just a List
mainview.tabRecyclerView.adapter = TabAdapter(tabs, this)
launch(UI) {
//The delay is important, it needs to be here
delay(1)
mainview.tabRecyclerView.adapter.notifyDataSetChanged()
}
return mainview
}
Я подозреваю, что mainview.tabRecyclerView.adapter.notifyDataSetChanged()
будет обновлять tabRecyclerView
только после завершения метода onCreateInputView
и возврата завышенногоmainview
объект.
Из-за этого странного поведения я вынужден создать сопрограмму с задержкой не менее 1 миллисекунды, чтобы я мог обновить набор данных для адаптера.
Это не похоже на хороший способ обновить набор данных моего переработчика?
Что я могу сделать, чтобы избежать такого поведения?
Хотя мой пост использует примеры на Kotlin, ответы на Java тоже хороши.