1. 程式人生 > >kotlin使安卓開發的程式碼變得簡潔

kotlin使安卓開發的程式碼變得簡潔

都說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、效果圖
這裡寫圖片描述