Поделиться экземпляром ViewModel между модулями в Android
Я работаю над архитектурой MVVM. Я хочу поделиться экземпляром модели представления между модулями в моем приложении для Android. когда пользователь завершит поездку из модуля приложения, я хотел бы получить доступ к своему экземпляру модели представления модуля чата, чтобы выполнить некоторую операцию с базой данных, т.е. очистить объект беседы и т. д. Я использую базу данных комнат с моделью представления. ChatActivityNew - это активность в модуле чата.
Модуль бронирования приложений
Dialogs.INSTANCE.showRideStatusDialog(mCurrentActivity, new View.OnClickListener() {
@Override
public void onClick(View v) {
Dialogs.INSTANCE.dismissDialog();
Dialogs.INSTANCE.showLoader(mCurrentActivity);
ChatActivityNew.setMukamalListener(iMukamalCallback);
dataRepository.requestEndRide(mCurrentActivity, driversDataHandler);
}
}
Модуль чата ChatActivityNew
/**
* Set the Mukamal Callback listener & call onMukamal abstract
* method which takes Message view model as a parameter.
*
* @param iMukamalCallback is a callback listener.
*/
public static void setMukamalListener(IMukamalCallback iMukamalCallback) {
mukamalCallback = iMukamalCallback;
mukamalCallback.onMukamal(mModel);
}
mModel является нулевым, потому что действие еще не загружено, а MessageViewModel является нулевым, так как я могу получить доступ к экземпляру MessageViewModel.
Я следил за документацией для разработчиков Android https://developer.android.com/topic/libraries/architecture/viewmodel
Любая помощь будет весьма заметна.
РЕДАКТИРОВАТЬ
Dialogs.INSTANCE.showRideStatusDialog(mCurrentActivity, new View.OnClickListener() {
@Override
public void onClick(View v) {
Dialogs.INSTANCE.dismissDialog();
Dialogs.INSTANCE.showLoader(mCurrentActivity);
EventBus.getDefault().postSticky(
new MessageEvent(com.example.chatmodule.utils.Constants.RIDE_COMPLETE)
);
dataRepository.requestEndRide(mCurrentActivity, driversDataHandler);
}
}
Модуль подписки на чат
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onMessageEvent(MessageEvent event) {
if (mModel != null && event.message.equalsIgnoreCase(RIDE_COMPLETE)){
mModel.deleteConversation();
mModel.deleteMessages();
}
}
1 ответ
В идеале, вы хотели бы максимально удалить эти модели представлений. Чтобы добиться того, что вы пытаетесь сделать, вам нужен механизм Event Aggregator.
В вашем примере ваш модуль чата подписался бы на события типа "NowSave", а приложение moudle опубликовало бы событие типа "NowSave", когда для этого требуется сохранение данных.
В мире Android EventBus
выглядит как популярная библиотека для использования с таким механизмом: http://greenrobot.org/eventbus/