当前位置: 首页 > news >正文

Android 创建一个全局通用的ViewModel

(推荐)使用ViewModelStore

代码示例:

class MyApplication : Application(), ViewModelStoreOwner {
    private val mViewModelStore = ViewModelStore()

    override fun onCreate() {
        super.onCreate()
    }

    override val viewModelStore: ViewModelStore
        get() = mViewModelStore


    /**
     * 手动清理 ViewModelStore
     */
    fun clearViewModelStore() {
        mViewModelStore.clear()
    }
}

ShareViewModel:

class SharedViewModel: ViewModel() {
    val mShareData = MutableLiveData<String>()
}

ActivityA & ActivityB

class MainActivity : AppCompatActivity() {
    private val TAG = "MainActivity"
    private lateinit var mShareViewMode: SharedViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        mShareViewMode =
            ViewModelProvider(application as MyApplication)[SharedViewModel::class.java]
        
        val tvTest = findViewById<TextView>(R.id.tvTest)
        tvTest.setOnClickListener {
            mShareViewMode.mShareData.value = "我是MainActivity更新的数据"
            startActivity(Intent(this,BActivity::class.java))
        }
        mShareViewMode.mShareData.observe(this){
            Log.i(TAG, "MainActivity shareData:$it")
        }
    }
}
class BActivity : AppCompatActivity() {
    private val TAG = "BActivity"
    private lateinit var mShareViewMode: SharedViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_bactivity)
        // 这里传入MyApplication的
        mShareViewMode =
            ViewModelProvider(application as MyApplication)[SharedViewModel::class.java]
        mShareViewMode.mShareData.observe(this) {
            Log.e(TAG, "BActivity onCreate shareData:$it")
        }
    }
}

http://www.dtcms.com/a/49858.html

相关文章:

  • 第十天-字符串:编程世界的文本基石
  • 高并发场景下的数据库优化
  • MongoDB 高级索引
  • netframework 读取appsettings.json
  • 【Redis】常用命令汇总
  • RMSNorm模块
  • SQL-labs13-16闯关记录
  • LeetCode-Hot100-008无重复最长子串
  • 111. 二叉树的最小深度
  • ESP32之Flash操作
  • 数字人分身/123数字人/数字人直播
  • [51 单片机] --串口编程
  • 【华为OD机考】华为OD笔试真题解析(17)--打印文件
  • 2025-03-04 学习记录--C/C++-PTA 习题5-4 使用函数求素数和
  • 手动调整3DTiles倾斜模型的高度、位置、亮度
  • MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU
  • HTML label 标签使用
  • 基于微信小程序的心理健康恢复系统+LW示例参考
  • 用DeepSeeker写小说构思 《故事大纲、主线、剧情风格》
  • 无人机遥控器无线传输技术解析!
  • 如何在随机振动分析中包括缓冲器
  • 【MySQL】与MongoDB的区别,字符集,三范式,存储引擎InnoDB、MyISAM
  • 【C++设计模式】第三篇:抽象工厂模式(Abstract Factory)
  • MySQL JOIN 与子查询深度对比:原理、性能陷阱与优化策略
  • 【C++学习篇】智能指针
  • 七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)
  • 从零开始学 Node.js:完整安装与实战指南
  • vulnhub靶场之【digitalworld.local系列】的JOY靶机
  • 深入解析英文单词“Dime”——从硬币到篮球助攻
  • 滑动窗口法——实践中的BA