Android JetPack学习总结(十三)

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)//如果是空指针就不执行
    }
}

发表评论