我正在创建一个使用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中的答案也很好。