Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

Android JetPack学习总结(十三)

Kotlin

本文目录 ⌄

    Kotlin初窥

    JetPack之后的教程要使用Kotlin语言来讲解,暂时并不打算从Java转到Kotlin,但是跟着教程学习,所以还是要了解一下。贴出以下的代码以加强记忆。

    TEXT
    //MainActivity.kt
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            var number:Int=0//变量,自动推导类型
            val const=1//final,不可修改
            textView.text="0"
            buttonPlus.setOnClickListener{
                textView.text=(++number).toString()
            }
    
            buttonMinus.setOnClickListener{
                textView.text=(--number).toString()
            }
        }
    }

    创建ViewModel

    TEXT
    //MyViewModel.kt
    class MyViewModel:ViewModel (){//继承是冒号
        val number:MutableLiveData<Int> by lazy { MutableLiveData<Int>().also { it.value=0 } }//延迟初始化
        //另一种初始化方式
    //    init {
    //        number=MutableLiveData()
    //        number.value=0
    //    }
        //还有一种初始化方式
    //    val number=MutableLiveData(0)
        fun modifyNumber(aNumber:Int) {//和class并列可以出现在class内外。可以作为函数的参数,可以作为函数的返回值
    //        number.value= number.value!!.plus(aNumber)  //强制执行
            number.value= number.value?.plus(aNumber)//如果是空指针就不执行
        }
    }

    使用ViewModel:

    TEXT
    //MainActivity.kt
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val viewModel =ViewModelProviders.of(this).get(MyViewModel::class.java)
            viewModel.number.observe(this, Observer {  textView.text=it.toString()})
            buttonPlus.setOnClickListener{
                viewModel.modifyNumber(1)
            }
            buttonMinus.setOnClickListener{
                viewModel.modifyNumber(-1)
            }
        }
    }

    修改后的ViewModel:

    TEXT
    class MyViewModel:ViewModel (){//继承是冒号
        private val _number:MutableLiveData<Int> by lazy { MutableLiveData<Int>().also { it.value=0 } }//延迟初始化
        val number:LiveData<Int>
            get()=_number
        fun modifyNumber(aNumber:Int) {//和class并列可以出现在class内外。可以作为函数的参数,可以作为函数的返回值
            _number.value= _number.value?.plus(aNumber)//如果是空指针就不执行
        }
    }
    通过 RSS 订阅更新 →