首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android:如何使findViewById(R.id.xxx)在从View类继承/扩展的类中工作?

在Android中,如果你想在从View类继承或扩展的类中使用findViewById(R.id.xxx),你需要确保你的类是一个Activity或者是一个ViewGroup。以下是一个简单的例子,展示了如何在一个自定义的ViewGroup中使用findViewById(R.id.xxx):

  1. 首先,在你的布局文件中创建一个自定义的ViewGroup,并为其分配一个ID。例如,在activity_main.xml中:
代码语言:xml
复制
<com.example.myapplication.MyCustomViewGroup
    android:id="@+id/my_custom_view_group"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <Button
        android:id="@+id/button_inside_custom_view_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button inside Custom ViewGroup" />

</com.example.myapplication.MyCustomViewGroup>
  1. 然后,在你的自定义ViewGroup类中,使用findViewById(R.id.xxx)来查找子视图。例如,在MyCustomViewGroup.java中:
代码语言:java
复制
package com.example.myapplication;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MyCustomViewGroup extends RelativeLayout {

    public MyCustomViewGroup(Context context) {
        super(context);
        init(context);
    }

    public MyCustomViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public MyCustomViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        View.inflate(context, R.layout.activity_main, this);

        Button buttonInsideCustomViewGroup = findViewById(R.id.button_inside_custom_view_group);
        buttonInsideCustomViewGroup.setText("Button inside Custom ViewGroup (modified)");
    }
}

在这个例子中,我们创建了一个名为MyCustomViewGroup的自定义ViewGroup,它继承自RelativeLayout。我们在init()方法中使用findViewById(R.id.xxx)来查找布局文件中的Button,并修改其文本内容。

需要注意的是,在自定义ViewGroup中使用findViewById(R.id.xxx)时,你需要确保布局文件已经被加载,否则会返回null。在上面的例子中,我们使用View.inflate()方法来加载布局文件,并将其添加到自定义ViewGroup中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

速读原著-Android应用开发入门教程(控件和基本事件响应)

在获取句柄时需要转换成相应控件类型,findViewById()函数参数是一个整数,返回值是一个android.view.View 类型。...通过 R.id.XXX 找到布局文件定义 ID,然后通过将基础转换成其实际获得真正句柄。注意:所转换必须和布局文件描述控件一致。...SetOnXXXListener()等函数是 android.view.View 函数,各种控件(包括 Button、EditText)都扩展这个,同族函数包括: void setOnClickListener...这些函数参数都是所对应 android.view.View 方法。...Android UI 基本控制内容:使用 findViewById()联系布局文件控件和句柄,并通过 OnClickListener()等定制句柄行为。

50240

ConstraintLayout2.0进阶之路-欢迎新同学

ConstraintLayout2.0针对布局来说,主要新增了两东西,一个是新增了VirtualLayouts,用于将一组View进行关联管理,并赋予定义能力,另一个是放开了ConstraintHelper...在Constraint Layout,VirtualLayouts作为virtual view group角色参与约束和布局,但是它们并不会作为视图添加到视图层级结构,而是仅仅引用其它视图来辅助它们在布局系统完成各自布局功能...View设置背景色功能,这个场景在ConstraintLayout1,只能通过新增一个View并建立与要设置背景色一组View约束方式来实现,而现在,使用Layer就很方便了。...ConstraintProperties ConstraintProperties是一个用于在代码创建约束工具。在2.0版本之前,我们需要这样修改属性,代码如下所示。...ConstraintProperties(findViewById(R.id.xxx)) .translationZ(8f) .margin(ConstraintSet.START, 8

75711

ButterKnife源码分析

0x01 前言 在程序开发过程,总会有一些场景需要去写重复冗余代码。而程序员一般都是懒惰了(懒惰促使人进步 ο ),所以就出现了很多可以减少重复工作框架或者工具。...所以我们可知,@BindView 是用来修饰 field ,并且保留至编译时刻。内部有一个默认属性 value ,用来表示 View id ,即平时程序 R.id.xxx 。...//得到被注解注解值,即 R.id.xxx int id = element.getAnnotation(BindView.class).value(); // 根据所在元素去查找...= null) { // 如果有父的话,那么要继承 result.superclass(parentBinding.bindingClassName); }...基本构建好了一个大概,其中对于构造器以及类似 findViewById 操作都是在 createBindingConstructor(targetTypeName, sdk) 实现: private

32420

Butterknife全方位解析

概述 Butterknife是供职于Square公司JakeWharton大神开发开源库,使用这个库,在AS搭配Android ButterKnife Zelezny插件,可以大大提高开发效率,...ButterKnife 1) 由于每次都要在ActivityonCreate绑定Activity,所以个人建议写一个BaseActivity完成绑定,子类继承即可 注:ButterKnife.bind...要对注解进行处理,则需要继承AbstractProcessor , 在boolean process(Set ButterKnife实现方式 知晓了注解可以在编译时候进行处理,那么,我们就可以得到注解字段属性与所在..., 进而生成注入文件,生成一个注入内部类,再进行字段处理 , 编译之后就会合并到注入,达到植入新代码段目的。...= injectObject.findViewById(R.id.tv_show); ,再将代码以内部类心事加入到组件所在 , 完成一次DI(注入) 。

70330

Android动画效果-更新

补间动画(Tween Animation/View Animation) Animation,动画抽象 AnimationAndroid系统一个动画抽象,所有其他一些动画都要继承该类实现方法...---- RotateAnimation:旋转变化动画 RotateAnimationAndroid系统旋转变化动画,用于控制View对象旋转动作,该类继承于Animation。...---- ScaleAnimation:尺寸变化动画 ScaleAnimationAndroid系统尺寸变化动画,用于控制View对象尺寸变化,该类继承于Animation。...---- AlphaAnimation:透明度变化动画 AlphaAnimationAndroid系统透明度变化动画,用于控制View对象透明度变化,该类继承于Animation。...---- AnimationSet:动画集合 AnimationSetAndroid系统动画集合,用于控制View对象进行多个动作组合,该类继承于Animation

3.7K20

Carson带你学Android:全面解析列表ListView与AdapterView

前言 ListView在Android开发十分常见 今天,我将为大家带来ListView与AdapterView全面解析,含其特点、工作原理等,希望你们会喜欢。...简介 Android一种列表视图组件 继承自AdapterView抽象图关系如下 2. 作用 集合多个 “项”(称为:Item) & 以列表形式 展示 3....扩展BaseAdapter可以对各个列表项进行最大程度定制 使用步骤: 定义主xml布局 根据需要定义ListView每行所实现xml布局 定义一个Adapter继承BaseAdapter,重写里面的方法...先定义一个Adapter继承BaseAdapter,并重写里面的方法 使用BaseAdapter必须写一个继承它,同时BaseAdapter是一个抽象继承它必须实现它方法。...> 定义一个Adapter继承BaseAdapter,重写里面的方法。

1K10

Android获取已连接wifi热点信息

最近要做些物联网应用,所以就必须要把这个搞懂,才能做一些实用物联网设备控制。点击获取WIFI热点信息最终效果如下: ? ? ?...简单怎么创建一个Android app工程就不说了,接下来说一下我获取步骤: 1、设置用户权限 因为我们要操作Android一些管理服务,所以一定要有权限才能去操作它。...; 9import android.view.View; 10import android.widget.TextView; 11 12//由于点击按键需要onClick方法,而这个方法是一个接口,所以要实现该接口...super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 //获取控件ID===>R.id.xxx...就是对应布局里控件 28 Get_info = (Button)findViewById(R.id.button1); 29 wifi_addr = (

3.2K40

Kotlin入门教程,快使用Kotlin吧

常见操作符讲解 1、: 操作符 1.1、声明常量和变量类型 1var count:Int=0 2val TAG:String="Main" 1.2、继承 1//注意,在Kotlin,所有的都是不能直接被继承...= null 3 4textView = findViewById(R.id.xxx) as TextView 5imageView = findViewById(R.id.xxx) as?...is 操作符 这两个个操作符使用和Javainstanceof一样,用来判断某个实例是否属于某个类型 1if (textView is View){ 2} 3if (imageView !...is TextView){ 4} 扩展函数 扩展函数数是指在一个上增加一种新行为,甚至我们没有这个代码访问权限。...使用场景:适用于调用同一个多个方法时,可以省去名重复,直接调用方法即可,经常用于AndroidRecyclerViewonBinderViewHolder,数据model属性映射到UI

97610

Android多线程:HandlerThread详细使用手册

前言 多线程应用在Android开发是非常常见,常用方法主要有: 继承Thread 实现Runnable接口 Handler AsyncTask HandlerThread 今天,我将全面解析多线程其中一种常见用法...作用 实现多线程 在工作线程执行任务,如 耗时任务 异步通信、消息传递 实现工作线程 & 主线程(UI线程)之间通信,即:将工作线程执行结果传递给主线程,从而在主线程执行相关UI操作...优点 方便实现异步通信,即不需使用 “任务线程(如继承Thread) + Handler”复杂组合 实际上,HandlerThread本质上是通过继承Thread和封装Handler使用,从而使得创建新线程和与其他线程进行通信变得更加方便易用...工作原理 内部原理 = Thread + Handler机制,即: 通过继承Thread,快速地创建1个带有Looper对象工作线程 通过封装Handler,快速创建Handler & 与其他线程进行通信...总结 本文全面介绍了多线程 HandlerThread用法 & 源码 接下来,我会继续讲解Android开发关于多线程知识,包括继承Thread、实现Runnable接口、Handler等等,有兴趣可以继续关注

93310

Android谈谈封装那些事--BaseActivity和BaseFragment(一)

说到封装我们首先想到就是面向对象,以前脑子里对于面向对象认识就是封装、继承、多态,随着自己真正进入开发工作之后,慢慢才有了更深认识;其实最深一次是在和朋友交流过程他给了我很大启发,所以技术交流其实还是很重要...举一个最简单例子:我们在写一个activity时候,我们可以把属性宏观理解为各种组件以及一些我们用参数,然后把我们处理业务逻辑代码写到自己方法,基本上所有的都是这样,属性-方法搞到一起,...当我们这个不能满足我们某些特定需求时,我们还有继承,通俗说:继承就是儿子遗传了老子基因,同时也派生出了新基因;继承是从已有的中派生出新,新能吸收已有数据属性和行为,并能扩展能力...在某些很简单情况下,或许我们不使用多态也能开发出满足我们需要程序,但大多数情况,如果没有多态,就会觉得代码极其难以维护。同时也补缺了Java继承不足。...当然这里不得不提到还有抽象,抽象就是把现实世界某一东西,提取出来,用程序代码表示,抽象出来一般叫做或者接口。 好了,这个面向对象我可能理解还是比较浅,也有不对地方,勿喷啊,多多指正。

2.6K30

Android适配器作用

Android中有很多适配器,首先看看这些适配器继承结构 Data、Adapter、View三者关系 Data、Adapter、View三者关系 一个listAdapter用来管理一个用一组任意对象数组填充...方法:   这个方法能够使用数组xml文件配置数据来创建一个ArrayAdapter,这个数组内容如何获得,通过this.getResources().getTextArray(id)方法获得...电源适配器将不适合机器工作电压输出为机器适合电压。转接头就更好理解了,将不配套插头和插座连接在一起。适配器模式跟这个类似,将两个不相干作用在一起,使它们能配套适用。...Android里面的适配器结构基本如上图所示。还有其他各种适配器如SimpleAdapter,SimpleCursorAdapter等都是直接或间接地继承BaseAdapter。...其实在Android中有很多这样例子,在继承某个时会默认让你Override一些方法,这些方法就是父没有实现接口方法。

95610

DataBinding学习

所有生成绑定都是从 ViewDataBinding 继承而来。 默认情况下,名称基于布局文件名称布局文件名称根据驼峰式命名并在末尾添加 Binding 后缀。...= DataBindingUtil.bind(viewRoot) 如何查找布局 以往传统布局通过findViewById传入R.id.具体名称查找,但是现在布局文件id字段被扩展为了布局绑定变量...数据绑定数据 在xml定义数据实体Bean,通过data标签定义变量名称和类型,即可在xml利用简单布局表达式填充内容。 那么数据如何传入进去呢?...只有导入才可在xml中使用,很常见一种情况通过数据某个字段来判断是否显示,这个时候需要引用ViewGone和Visible。...findViewById手动拿View进行属性设置了。

31820

你还在把Java当成Android官方开发语言吗?Kotlin了解一下!

Kotlin 扩展函数与扩展属性(Kotlin Extensions) Kotlin 能够扩展一个新功能而无需继承该类,或者对任意使用像“装饰者(Decorator)”这样设计模式。...List容器,这里在声明里作为“接受者类型”,.作为声明关键字,swap是扩展函数名,其余和Kotlin声明一个普通函数并无区别。...有必要探究一下Kotlin是如何实现扩展函数,直接分析Kotlin源码难度还是挺大,还好Android Studio提供了一些工具,我们可以通过Kotlin ByteCode指令,查看Kotlin语言转换字节码文件...,我们如何通过this获取到实例呢?...5.2 Android View 胶水代码 回到最开始例子,对于Android开发来说,对findViewById()这个方法一定不会陌生,为了获取一个View对象,我们总得先调用findViewById

67230

Android多线程:HandlerThread详细使用手册(含实例讲解)

前言 多线程应用在Android开发是非常常见,常用方法主要有: 继承Thread 实现Runnable接口 Handler AsyncTask HandlerThread 今天,我将全面解析多线程其中一种常见用法...作用 实现多线程 在工作线程执行任务,如 耗时任务 异步通信、消息传递 实现工作线程 & 主线程(UI线程)之间通信,即:将工作线程执行结果传递给主线程,从而在主线程执行相关UI操作 从而保证线程安全...优点 方便实现异步通信,即不需使用 “任务线程(如继承Thread) + Handler”复杂组合 实际上,HandlerThread本质上是通过继承Thread和封装Handler使用,从而使得创建新线程和与其他线程进行通信变得更加方便易用...工作原理 内部原理 = Thread + Handler机制,即: 通过继承Thread,快速地创建1个带有Looper对象工作线程 通过封装Handler,快速创建Handler & 与其他线程进行通信...使用步骤 HandlerThread本质:继承Thread & 封装Handler HandlerThread使用步骤分为5步 // 步骤1:创建HandlerThread实例对象 // 传入参数

51631

Android开发基础系列】Android开发学习专题

根据索引,每一个包含主要内容大致如下所示:     1、扩展和实现内容;     2、按包名继承(扩展)关系(可用于反向查找这个所在包);     3、Overview(概览);     ...每一个活动都被实现为一个独立,并且从活动(Activity)基继承而来,活动将会显示由视图(View)控件组成用户接口,并对事件(Event)做出响应。...在获取句柄时需要转换成相应控件类型,findViewById()函数参数是一个整数,返回值是一个android.view.View类型。...通过R.id.XXX找到布局文件定义ID,然后通过将基础转换成其实际获得真正句柄。注意:所转换必须和布局文件描述控件一致。         ...SetOnXXXListener()等函数是android.view.View函数,各种控件(包括Button、EditText)都扩展这个,同族函数包括: 5.1.2 第二种事件响应方法——通过实现接口

30120

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券