发布问题比较晚。不要认为答案正确地解决了问题。几年前报告了“报告显示的可见项目下的 getChildCount”问题,但我的研究发现没有人指出在某些情况下导致此问题浮出水面的原因。
我最近遇到了同样的问题,这导致我进一步调查。这是我的发现。
假设 RecyclerView 上的 9 个项目是否可见。调用 getChildCount()。它应该返回 9,可能会少/多 1 或 2,具体取决于顶部和底部的部分可见项目。这将是大多数时间的结果......直到软键盘显示一些 TextEdit 输入。如果在导致显示键盘的方法调用之后大约 500 毫秒调用 getChildCount(),结果将小于 9。它将是不受键盘视图阻碍的项目的计数。奇怪的是,即使用户没有更改 RecyclerView 的显示内容。奇怪的是,即使在关闭键盘之后,所有 9 个项目都再次可见,调用 getChildCount() 仍然会返回不正确的计数不足!这发生在 Android 11 上,大概是 11 之前的版本(没有在 11 之后的版本中测试)。
解决这个问题的一个线索是 RecyclerView.postInvalidateDelayed 方法。如果您确实需要使用正确的 getChildCount 数字,请执行以下操作(在键盘关闭后):
myRecyclerView.invalidate();
myRecyclerView.postDelayed(myRunnable, 200);
微妙的问题!