历史的垃圾堆·其一
关于什么东西过时了需要修正
Section titled “关于什么东西过时了需要修正”LiveData
Section titled “LiveData”慢着,什么是LiveData?
Section titled “慢着,什么是LiveData?”LiveData是用来通知观察者的一壳,里边套啥都行
只要LiveData的数据被重新赋值(哪怕值相同)就会通知给观察者
比如说下边丑陋的代码 ↓
viewModel.counter.observe(this) { count -> binding.infoText.text = count.toString() binding.plusOneBtn.text = "$count++"}viewModel 里面的 counter 就是一个类型为Int的 LiveData,用个observe就可以 时 时 刻 刻 视 奸 它 ,一见到它变化就能作出反应
如果想获取它的值,在后面加个.value即可
所以改了啥?
Section titled “所以改了啥?”由于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使用菜单……
Section titled “如果想在Fragment中的toolbar使用菜单……”关键词addMenuProvider,不要再选择setHasOptionsMenu了(虽然也能用
在Activity销毁时将数据返回给上一个Activity……
Section titled “在Activity销毁时将数据返回给上一个Activity……”使用registerForActivityResult而非startActivityForResult和onActivityResult
那registerForActivityResult要怎么用呢
其实逻辑和原来的是差不多的,就是通过某个Launcher(暂且这么叫)启动一个intent,然后获取它结束时的返回值
其实就是把startActivityForResult和onActivityResult合在一起了(大概吧
请看代码
pickImageLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { // 要做什么的代码 }}这样就能实现那两个已经废弃玩意的功能辣
AsyncTask
Section titled “AsyncTask”它已经死了,还是去看看协程吧
现在仓库什么的东西都在settings.gradle.kts里面了,不要再去build.gradle.kts里面找了!!!
老旧教程害人不浅啊
这玩意的版本现在由settings.gradle中的"com.android.application"其后的version决定,无论是否apply都是能修改版本的。。。
自Android 13起,PendingIntent.getActivity()中第四个参数已经不能填入0了,应该改成PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)