Share ViewModel between fragments that are in different Activity

后端 未结 6 1949
傲寒
傲寒 2020-12-08 05:12

I have a ViewModel named SharedViewModel:

public class SharedViewModel extends ViewModel {

    private final MutableLiveData selected = ne         


        
6条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-08 05:49

    you can use factory to make viewmodel and this factor will return single object of view model.. As:

    class ViewModelFactory() : ViewModelProvider.Factory {
    
    override fun create(modelClass: Class): T {
        if (modelClass.isAssignableFrom(UserProfileViewModel::class.java)) {
        val key = "UserProfileViewModel"
        if(hashMapViewModel.containsKey(key)){
            return getViewModel(key) as T
        } else {
            addViewModel(key, UserProfileViewModel())
            return getViewModel(key) as T
        }
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
    
    companion object {
        val hashMapViewModel = HashMap()
        fun addViewModel(key: String, viewModel: ViewModel){
            hashMapViewModel.put(key, viewModel)
        }
        fun getViewModel(key: String): ViewModel? {
            return hashMapViewModel[key]
        }
    }
    }
    

    In Activity:

    viewModelFactory = Injection.provideViewModelFactory(this)
    
    // Initialize Product View Model
    userViewModel = ViewModelProviders.of(this, viewModelFactory).get(
    UserProfileViewModel::class.java)`
    

    This will provide only single object of UserProfileViewModel which you can share between Activities.

提交回复
热议问题