Поделиться экземпляром 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/

Другие вопросы по тегам