RecyclerView - notifyDataSetChanged仅在1毫秒延迟后工作

时间:2018-05-26 05:10:08

标签: android android-recyclerview kotlin layout-inflater notifydatasetchanged

我正在创建一个使用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毫秒的协程,这样我才能更新适配器的数据集。

这似乎不是更新我的recyclerview数据集的好方法吗?

我可以做些什么来避免这种行为?

虽然我的帖子在Kotlin中使用了例子,但Java中的答案也很好。

0 个答案:

没有答案