今天使用了一下kotlin, Google指定的Android官方开发语言。简单记录一下。
一、使用Android Studio 配置开发环境
我的AS版本是2.2.2,在打开AS之后,只需要在File-Settings-Plugins-Brower Repositories中搜索KOTLIN插件,点击安装,59.3Mb大。安装完成之后,重新启动AS即可。
二、使用kotlin
和平常一样,新建项目,然后点击Code-Convert JAVA file to kotlin file即可将新建的项目中的java语言转换为kotlin。之后点击AS自动弹出的Config和SYNC。既可有AS自己向gradle中添加依赖。helloworld程序便可以运行。
kotlin的初始化onCreate是这样子的
package com.example.guofang.learnkotlin
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
是不是感觉很简洁的样子?
接下来牛刀小试,定义一个texview,为之设置点击事件。
package com.example.guofang.learnkotlin
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView=findViewById(R.id.tv_test)as TextView
textView.setOnClickListener {
Toast.makeText(this,"This is my first kotlin code!",Toast.LENGTH_LONG).show()
}
}
}
![实现后是这样的](http://img.blog.csdn.net/20170809082041704?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNTY2NTMyNDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其他
Kotlin确实非常简洁,有很多java不具备的优点
在jvm的基础上特别在安全性做了很大的改进。。很多的特性基本杜绝了一些不安全的编码,并且做了类似 RASP 的安全方案。
官方也宣传说对Java 100%兼容.
1.FindViewById
由于有了插件kotlin-android-extensions.
Activity里可以这样写,不需要在额外申明TextView变量了。所以注意xml文件里id的命名使用驼峰写法
setContentView(R.layout.main)
tvTitle.setOnClickListener { toast("hello") }
Adapter里这样写, ViewHolder完全不需要了
view.tvName.text = notice.name
view.tvNumber.text = ""
view.ivIcon.setImageUrlAsync(icon, true)
2.注意在kotlin中== 相当于java中的equal函数,=== 相当于java中的==。不过一般情况加==就够了。kotlin中没有基本类型,所有的如Int,Long都是对象。
3.Koltin的Null处理
使用安全操作符?可以省略很多无意义判空操作
不多说,直接上代码,一看就都明白了。
以前这样写
if (adapter != null) {
List<cmdnotice> list = adapter.getDatas();
if (list != null) {
for (CmdNotice it :list) {
if (it.getId() == notice.getId()) {
it.setStatus(notice.getStatus());
adapter.notifyDataSetChanged();
break;
}
}
}
}</cmdnotice>
现在这样写
adapter?.datas?.firstOrNull({ it.id == notice.id })?.let {
it.status = notice.status
adapter?.notifyDataSetChanged()
}