Где разместить тосты, закуски и т. Д. В эпоху компонентов архитектуры Android - PullRequest
0 голосов
/ 27 ноября 2018

Какая рекомендация по размещению тостов, закусок в Деятельности против Фрагмента в эпоху концепции ViewModel и one activity multiple fragments.

Понятно, что такие вещи, как

  • новое Intents
  • Транзакции фрагмента / настройка фрагмента
  • запросы разрешений
  • представление навигационных компонентов (ящик, панель просмотра)

должны обрабатываться операциями, ночто насчет тостов / закусочных ?

Существует так много вопросов о том, как показывать тосты или закуски во фрагменте и как + когда использовать getContext(), чтобы якак правило, действие позволяет обрабатывать все отображаемые сообщения.

С ViewModel и SingleLiveEvent довольно легко иметь sharedViewModel, который будет наблюдаться по активности и фрагментам, а при необходимости фрагмент отправляет событие, котороеуведомляет об активности, чтобы показать сообщение.

Итак, что, по вашему мнению, является наилучшей практикой / рекомендуется при наличии ответственности и разделения проблем за минуту?д?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вы можете создать BaseActivity и BaseFragment, где вы создаете все распространенные методы, такие как Toast, Snackbar и т. Д., Которые расширены в YourActivity и YourFragment.

0 голосов
/ 13 августа 2019

Подбирая реплику от кодовых надписей Google на базовых компонентах архитектуры , кажется, что фрагментам / действиям лучше реагировать на изменения в ViewModel.

Из приведенной выше ссылки Google, таким образом,означает, что одним из наиболее эффективных методов является Observe() свойство LiveData объекта ViewModel из вашего Activity

0 голосов
/ 28 ноября 2018

это зависит.Возможно, вы всегда можете заменить тосты / закусочные на некоторые части пользовательского интерфейса (TextViews, Buttons) или Dialogs / DialogFragments.

это действительно зависит от архитектуры вашего приложения, но я предполагаю, что вы можете создать некоторую зависимость: активность или фрагмент -в области видимости, так что вы можете добавить его в качестве абстракции для вашей ViewModel и использовать по своему усмотрению.

ИМХО, если вы имеете дело с Toasts, вы можете создать MessageShower в области действия / приложения и использовать его везде (имея дело с одним экземпляромtoast), но Snackbars должен отображаться для просмотра (поэтому им нужен жизненный цикл, и утечку памяти легче выполнять).

interface MessageShower{
    void showMessage(String message);
}

class LongToastMessageShower implements MessageShower{
    private Toast toast;

    public LongToastMessageShower(Context appContext){
         this.toast = Toast.makeText(appContext,"",Toast.LENGTH_LONG);
    }

    @Override
    public void showMessage(String message){
        toast.cancel();
        toast.setText(message);
        toast.show(); 
    }

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