今天使用了一下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()
}