kotlin使安卓開發的程式碼變得簡潔
阿新 • • 發佈:2019-02-07
都說kotlin是站在巨人的肩膀上(java),Kotlin 是一種在 Java 虛擬機器上執行的靜態型別程式語言,被稱之為 Android 世界的Swift,由 JetBrains 設計開發並開源。Kotlin 可以編譯成Java位元組碼,也可以編譯成 JavaScript,方便在沒有 JVM 的裝置上執行。在Google I/O 2017中,Google 宣佈 Kotlin 成為 Android 官方開發語言。確實,kotlin是非常強大的一門語言,下面我通過一個例子來給大家簡闡述它的強大(安卓開發方面)。
1、kotlin簡化了很多,下面簡單舉幾個例子,kotlin少了findViewById,可以直接用控制元件的id來進行操作,同時設定點選監聽也優化了,一句程式碼搞定button.setOnClickListener { doSomething() },同時開啟startactivity可以這樣寫 startActivity(Intent(this, Main2Activity::class.java)),其他的我就不一 一介紹了,有興趣的小夥伴可以參考官方文件
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// No need to call findViewById(R.id.textView) as TextView
textView.text = "Kotlin for Android rocks!"
//設定點選監聽
textView.setOnClickListener {
startActivity(Intent(this, Main2Activity::class.java))//開啟新的activity
}
}
}
2、下面寫了一個小例子,首先定義兩個抽象類baseActivity和baseFragment來作為activity和Fragment的基類
BaseActivity.kt
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
/**
* Created by aiiage on 2018/8/8.
* 定義activity的基類
*/
abstract class BaseActivity : AppCompatActivity() {
/**
* 獲取佈局id
*/
protected abstract fun getContentViewLayoutID(): Int
/**
* 初始化控制元件
*/
protected abstract fun initView(savedInstanceState: Bundle?)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (getContentViewLayoutID()!=0)
{
setContentView(getContentViewLayoutID())
initView(savedInstanceState)
}
}
//Toast彈窗
protected fun showToast(desc: String) {
Toast.makeText(this,desc,Toast.LENGTH_SHORT).show()
}
}
BaseFragment.kt
mport android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
/**
* Created by aiiage on 2018/8/8.
* Fragment的基類
*/
abstract class BaseFragment : Fragment(){
/**
* 獲取佈局ID
*/
protected abstract fun getContentViewLayoutID(): Int
/**
* 介面初始化
*/
protected abstract fun init()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return if (getContentViewLayoutID() != 0) {
inflater.inflate(getContentViewLayoutID(), container, false)
} else {
super.onCreateView(inflater, container, savedInstanceState)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
init()
}
}
BaseActivity的引用
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.view.View
import com.andream.aiiage.learn.R
import kotlinx.android.synthetic.main.activity_main.*
@Suppress("UNUSED_EXPRESSION")
class MainActivity : BaseActivity(), View.OnClickListener {
/**
* 控制元件點選事件監聽
*/
@SuppressLint("SetTextI18n")
override fun onClick(p0: View) {
when (p0.id) {
R.id.hello -> {
hello.text = "hello,kotlin"
showToast("welcome")
}
R.id.startNextActivity->{
startActivity(Intent(this, Main2Activity::class.java))
}
}
}
/**
* 返回佈局id
*/
override fun getContentViewLayoutID(): Int {
return R.layout.activity_main
}
/**
* 控制元件的初始化
*/
override fun initView(savedInstanceState: Bundle?) {
hello.setOnClickListener(this)
startNextActivity.setOnClickListener(this)
}
}
BaseFragment的引用
import com.andream.aiiage.learn.R
import kotlinx.android.synthetic.main.first_fragment_layout.*
/**
* Created by aiiage on 2018/8/8.
* firstFragment
*/
class FirstFragment : BaseFragment(){
override fun getContentViewLayoutID(): Int {
return R.layout.first_fragment_layout
}
override fun init() {
firstFragmentText.text="firstFragmentText"
}
}
3、效果圖