AndroidStudio中使用Kotlin--findViewById
2017-06-06 16:35
801 查看
虽然Kotlin已经出来一段时间了,但在Google将Kotlin设置为Android首选开发语言之前,也只是简单了解了一下。
现在准备把以前的一个项目改用kotlin写,也算是一边学一边写。
直接使用了官方提供的侧边栏代码,转换成了kotlin代码,还是遇到了一些问题。
①忘了怎么操作的,findViewById直接报错了
②看到网上有介绍说kotlin可以直接通过id找到控件,之前的findviewbyid就可以不用写了,但是
要先在module的build.gradle中配置
AndroidStudio会自动引用
activity_main、app_bar_main这些引用的都是控件所在的布局文件
有文章介绍这一点的时候都会引用第一个,这是不全面的,还是交给as去引用,上图中toolbar引用的就是第二个
③经实践,在自定义布局的dialog中不能省略findViewById,尽管有时候AndroidStudio会帮你像②中那样帮你引用好,
还是要老老实实的写好,不然运行的时候会爆出控件为null的错误
用之前老老实实的找到这个控件就冇问题了
做完这些就可以开始愉快的玩耍了
现在准备把以前的一个项目改用kotlin写,也算是一边学一边写。
直接使用了官方提供的侧边栏代码,转换成了kotlin代码,还是遇到了一些问题。
①忘了怎么操作的,findViewById直接报错了
val toolbar = findViewById(R.id.appToolbar) as Toolbar 会报错,改成如下就没问题了 val toolbar = findViewById<ToolBar>(R.id.appToolbar)
②看到网上有介绍说kotlin可以直接通过id找到控件,之前的findviewbyid就可以不用写了,但是
要先在module的build.gradle中配置
apply plugin: 'kotlin-android-extensions'接着在使用控件的时候选择联想列表里面的kotlin相关控件
AndroidStudio会自动引用
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.*
activity_main、app_bar_main这些引用的都是控件所在的布局文件
有文章介绍这一点的时候都会引用第一个,这是不全面的,还是交给as去引用,上图中toolbar引用的就是第二个
③经实践,在自定义布局的dialog中不能省略findViewById,尽管有时候AndroidStudio会帮你像②中那样帮你引用好,
还是要老老实实的写好,不然运行的时候会爆出控件为null的错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.AppCompatEditText.addTextChangedListener(android.text.TextWatcher)' on a null object reference这个错就是因为找不到AppCompatEditText造成的。
用之前老老实实的找到这个控件就冇问题了
var et_file_name: AppCompatEditText =view.findViewById<AppCompatEditText>(R.id.et_file_name)
做完这些就可以开始愉快的玩耍了
相关文章推荐
- android studio 3.0 使用Kotlin抛弃findViewById()
- android studio 3.0 preview 使用kotlin写android,抛弃findviewbyid
- 使用Kotlin,抛弃findViewById
- LayoutInflater 的基本使用; LayoutInflater ,setContentView,findViewById三者的对比。
- view右对齐 findviewbyid dialogbuilder SharedPreference 的使用
- 使用InjectView和findViewById说拜拜
- findViewById()使用常见错误
- findViewById()使用常见错误
- 如何在Fragment中使用findViewById呢?
- Android版本:使用findViewById()用字符串/在一个循环
- 你还在苦逼地findViewById吗?使用ButterKnife从此轻松定义控件
- 使用findViewById查找自定义view时返回NULL问题
- 使用findViewById查找自定义view时返回NULL问题
- 使用InjectView和findViewById说拜拜
- 关于在adapter使用LinearLayout的findviewbyid问题
- 关于android Activity中注解的使用,省去无用的findviewbyid....setonclick.....
- opengl的surfaceview使用findViewById返回null问题解决
- LayoutInflater及findViewById使用
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类