RecyclerView - notifyDataSetChanged работает только после 1 миллисекундной задержки - PullRequest
0 голосов
/ 26 мая 2018

Я создаю пользовательское приложение для клавиатуры, которое использует 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 тоже хороши.

...