循环浏览Android视图的所有子视图?

Sla*_*out 31 android view viewgroup android-viewgroup

我正在为Android开发游戏.为了帮助实现它,我的想法是创建一个视图的子类.然后我会插入此类的几个实例作为主视图的子项.每个实例都会处理它被按下的时间(通过OnTouchListener).

我现在遇到的问题是如何遍历所有这些子视图,以便我可以读取它们的状态并处理它们?(即当他们都达到某种状态时应该发生的事情).

或者,是否有更好的方法可以在屏幕上显示多个响应触摸的对象以及我可以检查其状态?

Tob*_*run 57

我做了一个递归函数的小例子:

public void recursiveLoopChildren(ViewGroup parent) {
        for (int i = 0; i < parent.getChildCount(); i++) {
            final View child = parent.getChildAt(i);
            if (child instanceof ViewGroup) {
                recursiveLoopChildren((ViewGroup) child);
                // DO SOMETHING WITH VIEWGROUP, AFTER CHILDREN HAS BEEN LOOPED
            } else {
                if (child != null) {
                    // DO SOMETHING WITH VIEW
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

该函数将开始循环遍历视图组内的视图元素(从最后一个到第一个项目),如果子视图组是一个视图组,则重新启动该子视图的函数以检索该子视图中的所有嵌套视图.

  • 你选择`for(int i = parent.getChildCount() - 1; i> = 0; i - )`而不是`for(int i = 0; i <parent.getChildCount(); i ++)的任何特殊原因`? (2认同)

Rom*_*Guy 21

@jqpubliq是对的但是如果你真的想要浏览所有的视图,你可以简单地使用getChildCount()getChildAt()方法ViewGroup.一个简单的递归方法将完成剩下的工作.