当前位置: 首页 > 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")
        }
    }
}

相关文章:

  • 第十天-字符串:编程世界的文本基石
  • 高并发场景下的数据库优化
  • 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写小说构思 《故事大纲、主线、剧情风格》
  • 无人机遥控器无线传输技术解析!
  • 做网站大概要多久/站长工具怎么关掉
  • 国内亲子游做的最好的网站/游戏推广员拉人犯法吗
  • 无线网站制作/营销团队外包
  • 水利网站建设管理汇报/宁波靠谱营销型网站建设
  • wordpress建立模板下载/移动端优化
  • 网站上的视频上传怎么做/无锡百度竞价