历史的垃圾堆·其一

 

关于什么东西过时了需要修正

LiveData

慢着,什么是LiveData

LiveData是用来通知观察者的一壳,里边套啥都行

只要LiveData的数据被重新赋值(哪怕值相同)就会通知给观察者

比如说下边丑陋的代码 ↓

viewModel.counter.observe(this) { count ->
    binding.infoText.text = count.toString()
    binding.plusOneBtn.text = "$count++"
}

viewModel里面的counter就是一个类型为Int的LiveData,用个observe就可以 时 时 刻 刻 视 奸 它 ,一见到它变化就能作出反应

如果想获取它的值,在后面加个.value即可

所以改了啥?

由于lifecycle-extensions在新版本已弃用,所以下面这种无聊的写法被抛弃辣

[!WARNING]

代码块里面似乎加不了删除线,所以我在这里放了个Warning

val userName: LiveData<String> = Transformations.map(userLiveData) { user ->
    "${user.firstName} ${user.lastName}"
}

现在的写法则是进一步简化,变成了

val userName: LiveData<String> = userLiveData.map { user ->
    "${user.firstName} ${user.lastName}"
}

至少现在能少传入一个参数了

如果想在Fragment中的toolbar使用菜单……

关键词addMenuProvider,不要再选择setHasOptionsMenu了(虽然也能用

在Activity销毁时将数据返回给上一个Activity……

使用registerForActivityResult而非startActivityForResultonActivityResult

registerForActivityResult要怎么用呢

其实逻辑和原来的是差不多的,就是通过某个Launcher(暂且这么叫)启动一个intent,然后获取它结束时的返回值

其实就是把startActivityForResultonActivityResult合在一起了(大概吧

请看代码

pickImageLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        // 要做什么的代码
    }
}

这样就能实现那两个已经废弃玩意的功能辣

AsyncTask

它已经死了,还是去看看协程

有关构建

现在仓库什么的东西都在settings.gradle.kts里面了,不要再去build.gradle.kts里面找了!!!

老旧教程害人不浅啊

有关AGP

这玩意的版本现在由settings.gradle中的"com.android.application"其后的version决定,无论是否apply都是能修改版本的。。。

杂项

自Android 13起,PendingIntent.getActivity()中第四个参数已经不能填入0了,应该改成PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)