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")
}
}
}