通过上图可知,Android 的页面是由多个 ViewGroup 和 View 构成,其中 ViewGroup 包含许多 View 和 ViewGroup。View 称之为“微件”,也可以说是组件、节点、控件。ViewGroup 通常称为“布局” 或 “容器”,可以是提供不同布局结构的众多类型之一,例如 LinearLayout 或 ConstraintLayout。
假如我有如下的布局,当我点击按钮时要获取所有 ChekBox 的值。获取一个微件可以通过 findViewById() 以及传递它的 id 来获取这个 View(CheckBox)。如果要获取所有的 CheckBox 怎么办呢?我还没有发现 Android 能像 Web 前端一样通过 class 获取一堆节点。
<LinearLayout
android:id="@+id/ques2_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2. 您现实中的收入来源?" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="父母给予" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="勤工助学" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="奖学金" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="补贴" />
</LinearLayout>
ViewGroup 提供了 getChildAt() 函数,只需要传递这个 View 在 ViewGroup 的索引值即可。getChildCount() 函数可以获取 ViewGroup 下有多少个 View。
public void getChildView() {
ViewGroup view = findViewById(R.id.ques2_layout);
CheckBox checkBox;
for (int index = 0; index < view.getChildCount(); index++) {
if (view.getChildAt(index) instanceof CheckBox) {
checkBox = (CheckBox) view.getChildAt(index);
if (checkBox.isChecked()) {
cb.callback(checkBox.getText().toString(), index);
}
}
}
}
首先要获取容器对象,即 ViewGroup。调用其函数 getChildCount() 获取容器有多少个微件数量。ViewGroup 下面还有一个 TextView 微件,这是我们不需要被遍历的对象,所以通过 instanceof 检查其实现类是否是 CheckBox。
标签:控件,遍历,index,获取,CheckBox,ViewGroup,Android,view,View From: https://www.cnblogs.com/Enziandom/p/16741594.html