Kotlin初窥
JetPack之后的教程要使用Kotlin语言来讲解,暂时并不打算从Java转到Kotlin,但是跟着教程学习,所以还是要了解一下。贴出以下的代码以加强记忆。
//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
//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:
//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:
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)//如果是空指针就不执行
}
}