对viewTreeObserver.addOnGlobalLayoutListener的使用感到困惑

时间:2019-06-02 03:16:20

标签: android kotlin

我正在更改recyclerview,并希望在更新完成时得到通知。我读过How to know when the RecyclerView has finished laying down the items?,说您在回调中收到了addOnGlobalLayoutListener的通知,但是除非您添加最后一行,否则它被调用了太多次。

这是我尝试过的:

my_rv.viewTreeObserver.addOnGlobalLayoutListener {
     calculate(myAdapter.getItems())
     my_rv.viewTreeObserver.removeOnGlobalLayoutListener(this)
}

为了编译最后一行,我的片段需要覆盖onGlobalLayout。我应该在onGlobalLayout中放什么?我从没见过那个回调函数。

1 个答案:

答案 0 :(得分:0)

这是因为在您的计算方法中,您更改了布局,例如设置文本,设置图像资源等,因此在第一次调用时,您需要删除侦听器,以避免侦听下一个GlobalLayout事件。

最好在第一行中删除removeOnGlobalLayoutListener

my_rv.viewTreeObserver.addOnGlobalLayoutListener {
 my_rv.viewTreeObserver.removeOnGlobalLayoutListener(this)
 calculate(myAdapter.getItems())
}