虽然Kotlin已经出来一段时间了,但在Google将Kotlin设置为Android首选开发语言之前,也只是简单了解了一下。
现在准备把以前的一个项目改用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)
做完这些就可以开始愉快的玩耍了