给定一个视图,我如何获得其中的子视图?
因此,我有一个自定义的视图和调试器显示,在mChildren
下有7个其他视图。我需要一种方法来访问这些视图,但似乎没有一个公共API可以做到这一点。
有什么建议吗?
编辑:
我的自定义视图继承自AdapterView
发布于 2011-12-06 12:13:46
for(int index = 0; index < ((ViewGroup) viewGroup).getChildCount(); index++) {
View nextChild = ((ViewGroup) viewGroup).getChildAt(index);
}
这样行吗?
发布于 2012-06-29 21:57:06
如果您不仅想要获取所有直接子项,而且还希望获取所有子项的子项等等,则必须递归地执行此操作:
private ArrayList<View> getAllChildren(View v) {
if (!(v instanceof ViewGroup)) {
ArrayList<View> viewArrayList = new ArrayList<View>();
viewArrayList.add(v);
return viewArrayList;
}
ArrayList<View> result = new ArrayList<View>();
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
ArrayList<View> viewArrayList = new ArrayList<View>();
viewArrayList.add(v);
viewArrayList.addAll(getAllChildren(child));
result.addAll(viewArrayList);
}
return result;
}
要使用结果,您可以这样做:
// check if a child is set to a specific String
View myTopView;
String toSearchFor = "Search me";
boolean found = false;
ArrayList<View> allViewsWithinMyTopView = getAllChildren(myTopView);
for (View child : allViewsWithinMyTopView) {
if (child instanceof TextView) {
TextView childTextView = (TextView) child;
if (TextUtils.equals(childTextView.getText().toString(), toSearchFor)) {
found = true;
}
}
}
if (!found) {
fail("Text '" + toSearchFor + "' not found within TopView");
}
发布于 2011-12-06 12:11:16
您始终可以通过View.findViewById() http://developer.android.com/reference/android/view/View.html#findViewById(int访问子视图。
例如,在活动/视图中:
...
private void init() {
View child1 = findViewById(R.id.child1);
}
...
或者,如果您有对视图的引用:
...
private void init(View root) {
View child2 = root.findViewById(R.id.child2);
}
https://stackoverflow.com/questions/8395168
复制相似问题