Я работаю над архитектурой 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 имеет значение null, поскольку действие еще не загружено, а MessageViewModel имеет значение null, так как я могу получить доступ к экземпляру MessageViewModel.
Я следовал документации разработчика Android
https://developer.android.com/topic/libraries/architecture/viewmodel
Любая помощь будет весьма заметна.
EDIT
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();
}
}