Поделиться экземпляром ViewModel между модулями в Android - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над архитектурой 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();
        }
    }

1 Ответ

0 голосов
/ 28 августа 2018

В идеале, вы бы хотели максимально разобщить эти модели представлений. Чтобы добиться того, что вы пытаетесь сделать, вам понадобится механизм Event Aggregator.

В вашем примере ваш модуль чата будет подписываться на события типа "NowSave", а приложение moudle будет публиковать событие типа "NowSave", когда требуется сохранение данных.

В мире Android EventBus выглядит как популярная библиотека для использования с таким механизмом: http://greenrobot.org/eventbus/

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