首页 > 其他分享 >Android 如何遍历容器(布局)下的所有控件(节点/组件)?

Android 如何遍历容器(布局)下的所有控件(节点/组件)?

时间:2022-09-29 15:00:17浏览次数:51  
标签:控件 遍历 index 获取 CheckBox ViewGroup Android view View

image

通过上图可知,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

相关文章

  • Android权限询问
    Android权限询问AndroidMaifest.xml中声明权限<!--声明所有需要的权限(包括普通权限和危险权限)--><uses-permissionandroid:name="android.permission.READ_EXTERNA......
  • Android开发 资源分享与被分享
    前言在使用应用功能时会经常需要分享一些图片等等其他资源到微信上,或者接收一些其他应用分享来的图片等等其他资源。接收分享来的资源下面这个例子使用一个activity......
  • C#中使用BackgroundWorker控件
    在C#中,BackgroundWorker控件允许在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面(UI)似乎处于停止响应状态。如果需要能进行......
  • android修改系统默认语言:
    //参考:http://t.zoukankan.com/x_wukong-p-9375264.htmlhttps://blog.csdn.net/qq_37858386/article/details/112616750https://news.68idc.cn/makewebs/asks/201404118......
  • vue 遍历图片渲染
    原文链接:https://blog.csdn.net/sywdebug/article/details/120763271举例说明获取目录下的文件名新创建一个vue项目,获取views目录下的以.vue结尾的文件的文件名mounted......
  • WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况
    本文记录将WPF控件放入到UserControl里,如果此UserControl没有被设置Visibility为可见过,那么放在此UserControl内的控件将获取不到HwndSource内容如果对某个V......
  • 第一行代码——Android pdf
    高清扫描版下载链接:https://pan.baidu.com/s/11KAJX-VoSFc1DGptsHREpg点击这里获取提取码 ......
  • Android 使用压缩纹理
    本文介绍了什么是压缩纹理,以及加载压缩纹理的核心步骤。并在AndroidOpenGLES平台上实现了压缩纹理的显示。一、压缩纹理概念传统的图片文件格式有PNG、JPEG等,这......
  • Android动态设置shape形状背景,GradientDrawable动态设置背景色、圆角
    1、静态设置<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!--填......
  • Android进阶笔记-7. Context详解
    Context数量Activity数量+Service数量+1(1为Application)Context的继承关系Context下有两个子类,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能......