2016-10-21 6 views
0

У меня возник вопрос, который, надеюсь, вы можете помочь мне исправить. В моем приложении для Android я показываю Snackbar обычным способом (Snackbar.make().show()). Однако мне также приходится иметь дело с изменениями конфигурации (например, изменения ориентации от портрета к пейзажу).Как справиться с изменением конфигурации в Snackbar?

Теперь, если конфигурация изменится, Snackbar исчезает, и я ничего не ожидаю. У меня была такая же проблема с ProgressDialog и AlertDialog, которую я решил с помощью пользовательского подкласса DialogFragment.

Я также имел этот вопрос с моим AsyncTasks, которые я решить, используя пользовательский подкласс фрагмента, который я сохранить (setRetainInstance(true) в onCreate() фрагменте) и который держит ссылку на мой AsyncTask. В обоих случаях каждый фрагмент имеет интерфейс обратного вызова, который должен выполнить Activity, и я устанавливаю/отменяет обратный вызов во время onAttach()/onDetach().

Однако, Snackbar кажется другим, потому что он прикреплен к представлению вместо контекста, например, к ProgressDialog (в getDialog() моего DialogFragment я могу использовать новый ProgressDialog(getActivity())).

Итак, когда и как мне отобразить закусочную после изменения конфигурации? Использует ли фрагмент способ, или я должен попытаться обойти это, имея некоторые частные переменные в моей деятельности, которые я сохраняю/восстанавливаю с помощью savedInstanceState?

ответ

0

Поскольку нет подходящего ответа не был предусмотрен, и я должен был выполнить работу в срок, теперь я пошел следующий раствор:

  • Создайте activiy базовый класс, который расширяет AppCompatAcitity и от которой вся моей activies наследует
  • В базовом классе активности создайте кучу переменных экземпляра для хранения информации о Snackbar (isShowing, идентификатор, сообщение, действие, аргументы)
  • В базовом классе активности создайте способ отображения закутки, предоставив все ранее упомянутые переменные
  • В базовом классе деятельности используйте onSaveInstanceState и onRestoreInstanceState для сохранения/восстановления ранее упомянутых переменных.
  • Если Snackbar показывается до изменения конфигурации, булев будет сохранен и восстановлен, и я могу использовать его для создания новой Snackbar с той же конфигурацией в onRestore() из моего базового класса активности
  • При создании закусочной я использую snackbar.setCallback(), чтобы установить обратный вызов, где я проверяю, была ли отключена закуска, и если да, я меняю isShowing на false
  • При настройке закусочной я установил действие для вызова метода в моем базовом классе activiy с использованием идентификатора, который я ранее предоставлял в качестве аргумента, чтобы проверить, какая кличка Snackbar была нажата.
Смежные вопросы