Как я могу поделиться ViewModel между несколькими фрагментами - PullRequest
0 голосов
/ 18 апреля 2020

Это моя фабрика SessionViewModel

class SessionViewModelFactory(
    private val sessionId: String
) : ViewModelProvider.NewInstanceFactory() {

    @Suppress("unchecked_cast")
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return if (modelClass.isAssignableFrom(SessionViewModel::class.java)) {
            SessionViewModel(
                sessionId = sessionId,
                sessionRepository = SessionRepository(
                    WebserviceGenerator.webservice,
                    AppDatabase.getDatabase()?.questionDao()
                )
            ) as T
        } else {
            throw IllegalArgumentException("ViewModel Not Found")
        }
    }
}

Я хочу, чтобы SessionViewModel был общим для всех фрагментов, имеющих одинаковый идентификатор сессии.

Пример: Предположим, у нас есть фрагменты, как в следующем фрагменте # 1 имеет sessionId "a". Фрагмент # 2 имеет sessionId "a". Фрагмент # 3 имеет идентификатор сеанса "b". Фрагмент # 4 имеет идентификатор сеанса "b".

Тогда у фрагмента № 1 и фрагмента № 2 должен быть один и тот же экземпляр SessionViewModel. Фрагмент № 3 и фрагмент № 4 должны иметь один и тот же экземпляр SessionViewModel.

1 Ответ

0 голосов
/ 19 апреля 2020

Ну, viewmodel существует, пока ваше приложение работает. Хорошая вещь: она не убивается, когда убита ваша деятельность / фрагменты.

Вы можете вызывать одну и ту же модель представления из разных фрагментов.

Допустим, у вас есть

var myQuantity

внутри вашей модели представления.

Из фрагмента A вы можете вызвать модель представления и установить, например, значение myQuantity на 5. Затем из фрагмента B вы можете вызвать viewmodel и получить значение myQuantity, вы получите 5

Вы не можете найти больше здесь (как вызвать viewmodel, ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...