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

Android findViewById在主Activity以外的类中使用时返回null

在主Activity以外的类中使用findViewById()时返回null,这是因为findViewById()方法是在Activity的视图层次结构中查找视图的。当在其他类中使用findViewById()时,它无法访问到Activity的视图层次结构,因此返回null。

为了解决这个问题,可以将视图查找的操作移到Activity中,然后将查找到的视图传递给其他类。例如,可以在Activity中创建一个方法来查找视图,并将其传递给其他类。

代码语言:java
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.textView);
        OtherClass otherClass = new OtherClass();
        otherClass.doSomething(textView);
    }
}

public class OtherClass {
    public void doSomething(TextView textView) {
        // 在这里可以使用textView
    }
}

在这个例子中,findViewById()在Activity中被调用,然后将查找到的视图传递给OtherClassdoSomething()方法。这样,就可以避免在其他类中使用findViewById()时返回null的问题。

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

相关·内容

Android 多线程:这是一份详细AsyncTask使用教程

定义 一个Android 已封装好轻量级异步 属于抽象,即使用时需 实现子类 public abstract class AsyncTask {... & 方法介绍 4.1 定义 AsyncTask类属于抽象,即使用时需 实现子类 public abstract class AsyncTask...Result:异步任务执行完成后,返回结果类型,与doInBackground()返回值类型保持一致 // 注: // a. 使用时并不是所有类型都被使用 // b....6.2 具体实现 建议先下载源码再看:Carson_HoGithub地址:AsyncTask 布局文件:activity_main.xml <?...使用时注意点 使用AsyncTask时有一些问题需要注意: 7.1 关于 生命周期 结论 AsyncTask不与任何组件绑定生命周期 使用建议 Activity 或 Fragment中使

1.2K30
  • Android仿优酷视频悬浮窗播放效果

    之前接了需求要让视频播放时可以像优酷视频那样悬浮窗里播放,并且悬浮窗和播放页面之间要实现无缝切换,项目中使是自封装ijkplayer 这个要求就代表不能在悬浮窗中新建视频控件,所以需要在悬浮窗中复用主页面的视频控件...(R.id.vw_live); video_frame.addView(vw_live); 播放界面的启动模式 播放界面的activity启动模式不能为默认,因为我们要保证播放界面显示悬浮窗时候退到后台...,但是整个应用不能退到后台,所以activity启动模式改为singleInstance android:launchMode=”singleInstance” 退到后台我们通过moveTaskToBack...return isMove; } } 悬浮窗消失,在这里调用videoLayout.removeAllViews()是为了将复用视频控件父View清空,返回播放activity...activity使用了singleInstance启动模式,所以从悬浮窗返回界面activity时,要添加flag Intent intent = new Intent(activity, activity.getClass

    2.1K20

    Fragment基本使用

    Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity生命周期影响 官方定义如下: A Fragment represents a behavior...介绍Fragment具体使用时,先介绍一下Fragment几个核心 Fragment:Fragment,任何创建Fragment都需要继承该类 FragmentManager:管理和维护...或其子类,同时实现onCreate()方法,方法中,通过inflater.inflate加载布局文件,接着返回其View 需要加载FragmentActivity对应布局文件中name属性设为全限定名...,修改布局文件,不指定标签name属性。...()方法返回FragmentUI布局,需要注意是inflate()第三个参数是false,因为Fragment内部实现中,会把该布局添加到container中,如果设为true,那么就会重复做两次添加

    1.9K30

    Android项目实战(十七):QQ空间实现(二)—— 分享功能 弹出PopupWindow

    分析: 1、点击右上角三个点图标,界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 2、当该区域出现时候,详情界面便灰了,也说成透明度变化了 3、当任意选了一个按钮或者点击了该区域以外部分...1f); } }); break; } } } 注意点: 如果你在你自己项目中使用了弹出...PopupWindow,报错如下: Unable to add window -- token null is not valid; is your activity running一般是错误 .showAtLocation...()方法上,那么要注意PopupWindow和Dialog一样是需要依赖于Activity存在 所以不要在onCreate()方法中使用 .showAtLocation()方法 ,因为这个时候Activity...博现在从事社交社区APP开发,有同领域朋友欢迎关注交流~~~

    1.1K60

    Carson带你学Android:SQLlite数据库操作全解析(SQLiteOpenHelper)

    前言 Android开发中,主要数据存储有5种,具体如下 其中,SQLite数据库存储方式 非常常用 今天我将带大家全面了解关于Android SQLite数据库操作(增、删、查、改) 目录...数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用 // 继承SQLiteOpenHelper子类中复写...数据库升级时自动调用 // 继承SQLiteOpenHelper子类中复写 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion...(通常是 Null) // version:当前数据库版本,值必须是整数并且是递增状态 // 必须通过super调用父构造函数 super(context...test_carson"); break; default: break; } } } 步骤3:布局文件设置按钮控制数据库操作

    96520

    Fragment 当中使用 Kotlin-Android-Extensions 需要注意

    可是有了 kotlin-android-extensions 之后,我们可以直接在 Activity、 Fragment、 View 当中使用这个 logoutView 了。... Fragment 中使用 Kae 有什么毛病? 好啦,介绍到此,我们来说说问题。...前面提到实际上是 Activity 实现, Activity 本身就有 findViewById ,所以这里面似乎不会有什么问题出现,而 Fragment 就会稍微麻烦一些,它需要用它 View...INVOKEVIRTUAL android/view/View.findViewById (I)Landroid/view/View; 这时候 Fragment.getView 必然返回 null,所以就会遇到空指针...对于这个问题,如果我们强制要求 Fragment getView 不返回 null,这样是不会出现空指针了,但长时间持有 UI 引用,可能会导致内存泄露。换句话说, null 是不可避免

    1.7K10

    Android利用碎片fragment实现底部标题栏(Github模板开源)

    相当于一个迷你Activity Fragment可以作为Activity组成部分,一个Activity可以有多个Fragment 一个Fragment可以被多个Activity重用 Activity...每一个分类都对应着上方一个fragment,因此我们需要创建四个fragment来对应下面的每一个分类,下面的底部导航栏不是由fragment来实现,而是直接在布局activity_main.xml...activity_main.xml上方是fragment,因此使用帧布局framelayout,下面是activity_main.xml布局代码: 一.activity_main.xml <?...,只是其构造方法名称略有不同,所使用了fragment1(2/3/4),毕竟它们名不同嘛。...编写了fragmentJava代码,是时候编写fragmentxml代码了,因为这样才可以将编写好界面传递到界面:activity_main.xml当中,代码如下: 四.fragment1.xml

    90931

    Android应用界面开发——简单控件和Activity间传递数据

    开启Android开发之旅 要想开发一个Android App,开发环境是必不可少,所以学习之前应该先搭建环境,环境如下: JDK + Android SDK(配置环境变量) 开发环境:Android...当Activity被onStop后,但是没有onDestroy,再次启动此Activity时调用onRestart(而不再调用onCreate)方法。...进入主界面,有两个按钮,一个TextView,一个按钮是进入买书界面,点击该按钮将会跳转到买书界面,您要买书后面是一个TextView,买书界面输入书名后,提交,会把输入书名返回给该界面,另一个按钮是重置...点击提交后,可以看到输入书名返回到了界面。 ?...Demo全部代码放在了Github上,点击进入下载地址 Android Studio一些快捷方式 Ctrl + 鼠标左键 / Ctrl + B:跳转或方法定义 Alt + Insert:生成代码(

    1.9K30

    要再见了吗,Kotlin Android Extension

    销毁之后空指针 KAE 是通过字节码层面添加合成属性来解决 findViewById 问题,对于 Activity 和 Fragment 而言,合成属性背后其实就是一个缓存,这个缓存会在 Activity...就这个具体问题而言,倒也很容易解决,现在 Android 当中已经有了足够多生命周期管理工具,我们能够很好避免 Fragment 或者 Activity 生命周期结束之后还要执行一些相关操作...textView.text = "MainActivity" 编译时高高兴兴,运行时就要垂头丧气了,因为 findViewById 一定会返回 null,而合成属性又不是可空类型。...通过合理设计 UI 相关,这个问题本身也可以很好规避。 另外,如果语言本身支持把包名作为命名空间,代码访问时直接予以限定,一样可以达到目的。...我看到废弃 KAE 讨论中,大家还是觉得废弃有些难以理解,毕竟之前你也没怎么管这个插件啊,这么多年了除了加了个 Parcelize 功能以外,也没怎么着啊。

    1.8K40

    Android自定义View

    :对两个按钮单击事件进行处理,单击“返回”键时候提示并结束当前Activity,单击“操作”按钮时候进行提示。...那么接下来就可以布局文件中使用这个组合控件了: acitivity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com...文件夹中布局文件,这样的话就得activity_main.xml对应文件中书写加载布局文件事件处理逻辑,否则这个加载布局文件就没有事件处理效果了 最后是MaiActivity.java...别忘了布局文件activity_main.xml中加入这个控件: <com.example.defineView.ThroughView android:layout_width="...这个并且重写了其onDraw方法来实现自己控件样式,控件中画了一个圆并且通过它点击事件来实现改变控件颜色和计数, 最后布局文件activity_main.xml中加入这个控件,你也可以MainActivity.java

    59510

    首页-底部Tab导航(菜单栏)实现:FragmentTabHost+ViewPager+Fragment

    ---- 前言 Android开发中使用底部菜单栏频次非常高,主要实现手段有以下: - TabWidget - 隐藏TabWidget,使用RadioGroup和RadioButton...,接收它自己事件,并可以activity运行时被添加或删除 3.Fragment不能独立存在,它必须嵌入到activity中,而且Fragment生命周期直接受所在activity影响...作用 主要是为了支持更动态、更灵活界面设计(从3.0开始引入) 具体使用请参考我写另外一篇文章Android开发:Fragment介绍&使用方法解析 底部菜单栏实现步骤 xml布局里面定义一个...具体实现步骤 步骤1:xml布局里面定义一个FragmentTabHost控件 xml布局:Main_tab_layout.xml <?...xml布局里面定义一个FragmentTabHost控件 2. 定义底部菜单栏布局 3. 定义每个Fragment布局 4. 定义每个FragmentJava 5.

    1.9K20

    Android AsyncTask异步处理

    开发Android用时必须遵守单线程模型原则: Android UI操作并不是线程安全并且这些操作必须在UI线程中执行。单线程模型中始终要记住两条法则:  1....确保只UI线程中访问Android UI工具包      当一个程序第一次启动时,Android会同时启动一个对应主线程(Main Thread),主线程主要负责处理与UI相关事件,如:用户按键事件...().因为其他线程中是不能直接访问UI线程成员  Android提供了几种在其他线程中访问UI线程方法: Activity.runOnUiThread( Runnable )  View.post...为了解决这个问题,Android 1.5提供了一个工具:AsyncTask 它使创建需要与用户界面交互长时间运行任务变得更简单,不需要借助线程和Handler即可实现。 ...Progress 后台任务执行百分比。    Result 后台执行任务最终返回结果,比如String。

    1.2K30

    2014-10-25Android学习--------按钮点击事件写法

    在上篇文章中介绍了一个main.xml布局,这也是主进程布局,现在来看看它activity: 源码: import com.wust.healthfood.R; import android.app.Activity...定义两个 按钮,分别对应布局文件中Button1和Button3 Button list=null; Button about=null; onCreate(Bundle)函数里面通过...);找到他们 接下来就是监听事件了: (一)让去实现OnClickListener未实现方法 list.setOnClickListener(this);// 这里面this代表上下文 写完它只会需要实现...OnClickListener未实现方法 当布局文件中有很多id时候,我们最好采用让去实现OnClickListener未实现方法,也就是让MainApp去implements OnClickListener...,只是当很多控件需要监听事件时候,最好采用让是实现未实现方法,这样代码好管理。

    42330

    Android微信程序中实现蓝牙聊天功能示例代码

    项目要求 1.初次打开程序时右上角标题栏显示“无连接”,点击旁边按钮选择“我好友”,进入配对界面; 2.选择好友之后,返回界面,标题栏会显示已连接手机型号; 3.两部手机间可通过蓝牙聊天 效果展示...主要代码 1.清单文件中注册权限 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" / <uses-permission...android:name="android.permission.BLUETOOTH" / 2.文件res / values / strings.xml里,添加程序运行过程中状态描述文本及配色代码等...run()方法中使用阻塞模式 InputStream.read()循环读取输入流,然后发送到 UI 线程中更新聊天消息。...微信程序中实现蓝牙聊天功能文章就介绍到这了,更多相关android 微信程序蓝牙聊天内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

    2.1K30
    领券