Android Kotlin学习记录 - 使用Kotlin向布局中动态添加组件-使用viewBinding

本文记录了使用Kotlin与ViewBinding动态向LinearLayout添加TextView时遇到的问题及解决过程。作者最初尝试直接通过R.layout.activity_main设置内容视图,但界面未显示新增组件。最终发现viewBinding的布局与直接访问的不同,通过setContentView(binding.root)成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Kotlin学习记录 - 使用Kotlin向布局中动态添加组件-使用viewbinding

经过一个下午的Kotlin语法学习, 在了解了Kotlin基础之后,开始学习使用Kotlin编写安卓程序, 并采用ViewBinding的方式获取控件

第一个程序就遇到了问题, 当我想使用编写代码的方式向一个LinearLayout中动态添加一个Textview的时候,界面没有变化

以下是界面代码

    <LinearLayout
        android:id="@+id/layout_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
    </LinearLayout>

以下是Kotlin代码

class MainActivity : BaseActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(R.layout.activity_main)

        var view:TextView = TextView(this)
        view.text = "test"
        view.textSize = 50F
        binding.layoutNavigationBar.addView(view)

    }
}

运行一下

界面是一片空白,没有任何变化
界面一片空白没有任何变化

我又选择重新写了一个Java版本的作为对照,结果这样是可以正常工作的
在这里插入图片描述
尝试了网上部分解决方法之后,毫无用处
突然闪过一个想法,会不会和viewbinding有关

查询资料:viewbinding通过getRoot的方法获取根布局,并且viewbinding在使用的时候需要实例化,如下面这行代码

binding = ActivityMainBinding.inflate(layoutInflater)

我想到,既然需要实例化,那么这个viewbinding或许所包含的布局和直接通过R.layout.activity_main访问到的布局或许并不是同一个,而既然其通过getRoot方法获取根布局,那我尝试将setContentView(R.layout.activity_main)修改为viewBinding的根布局

 setContentView(binding.root)

测试一下
在这里插入图片描述
果然有效,问题解决

综上, viewBinding所获取到的布局和直接通过R.layout.activity_main访问到的布局并不是同一个,当启用了viewBinding之后,获取组件都应当通过viewBinding来获取

如果这篇文章对你有帮助,欢迎点个赞,Kotlin新人,如有错误,欢迎指正,禁止抄袭

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值