Android Kotlin中findViewById获取TextView返回null排查
问题根本原因
返回null的核心原因是**findViewById的调用对象错误**,对查找范围的理解有偏差:
- 你在点击回调方法
cauntMe里,是在传入参数view上调用findViewById的。这个传入的view不是Activity、也不是布局根容器,而是触发这次点击事件的Count按钮本身。 View.findViewById()的查找逻辑是:仅在当前View自身、以及当前View的所有子View层级中匹配目标ID,不会查找当前View的父容器、也不会查找和当前View平级的兄弟控件。- 对照你的布局结构,目标
TextView和触发点击的Button是ConstraintLayout下的平级子控件,TextView根本不在Button的子View树里,自然查找结果为null。
修复方案
直接把查找逻辑改成在Activity层面调用findViewById即可,Activity的findViewById会从你通过setContentView加载的整个布局根节点开始遍历查找,不受控件层级限制:
fun cauntMe(view: View){ // 去掉前面的view. 直接调用Activity的findViewById val textView = findViewById<TextView>(R.id.textView) val countString = textView.text.toString() var count: Int = Integer.parseInt(countString) count++ textView.text = count.toString() }
其他绕路的写法(比如先取按钮的父布局再在父布局上查找)虽然也能实现,但属于冗余写法,没有必要。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

