赞
踩
经过一个下午的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新人,如有错误,欢迎指正,禁止抄袭
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。