2

我创建了一个TextView带有 X 按钮的自定义,当单击该按钮时,其可见性设置为 GONE。现在我想获取TextViews. LinearLayout目前,我正在计算插入的总 TextViews 而不是可见的。

例子:

当我有 2 个 TextView 时,getChildCount() 给出 2,但如果我TextView通过单击 X 按钮删除一个,它仍然给我 2。为什么会发生这种情况?

我创造了这样的东西:

它是一个文本视图

这里的 X 是一个按钮,它的 onClick() 将设置两者的可见性TextView并设置Button为 GONE。

4

2 回答 2

3

我怎样才能得到可见孩子的数量?

为此,您需要遍历视图/布局的子级并检查可见性。这是一个简单的循环:

// untested/pseudocode
int visibleChildren = 0;
for (int i = 0; i < layout.getChildCount(); i++) {
    if (layout.getChildAt(i).getVisibility() == View.VISIBLE) {
        visibleChildren++;
    }
}
于 2013-07-08T12:25:26.537 回答
0

发布问题比较晚。不要认为答案正确地解决了问题。几年前报告了“报告显示的可见项目下的 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); 

微妙的问题!

于 2021-11-21T21:41:21.243 回答