Панель выполнения Android DialogFragment
Я искал везде, и я не могу найти решение этой проблемы.
В основном у меня есть экран входа в систему, и я пытаюсь получить прокручиватель прогресса, чтобы он отображался во время входа на сервер (через поток), а затем уволил его после успешного входа в систему. Он должен работать, изменяя ориентацию.
Я использую DialogFragment
с пакетом совместимости Android для создания индикатора выполнения (не могу найти на нем никакой документации, только для базового диалога \alert), потому что showDialog()
устарел. Сейчас я просто показываю пользовательское окно сообщений в качестве счетчика входа.
В резюме:
- Как настроить счетчик Progress с помощью
DialogFragment
.
- Как я могу отклонить его в другом потоке после изменения ориентации.
Ответы
Ответ 1
Я знаю, что это старый вопрос, но я хочу поделиться гораздо лучшим решением для этого
В соответствии с Android Development Protip:
"Остановить использование ProgressDialog, встроенные индикаторы - ваш друг"
Как Роман Нурик состояния:
![enter image description here]()
Это быстро. Прекратите использование ProgressDialog и других модальных нагрузок показатели. Они чрезвычайно прерывисты и раздражают, особенно когда:
-
Вы видите его каждый раз, когда вы переключаете вкладки.
-
Вы не можете вернуться из них.
-
Они говорят: "Пожалуйста, подождите". Нет, спасибо, я бы скорее просто удалил.
Либо показывать индикаторы загрузки внутри вашего контента (например, http://developer.android.com/training/animation/crossfade.html) или еще лучше, загрузите небольшие объемы данных в фона, чтобы вы минимизировали необходимость даже показывать загрузку индикатор.
Подробнее о прогрессе и активности в рекомендации по дизайну.
Ответ 2
Для отображения счетчика прогресса просто переопределите DialogFragment.onCreateDialog() в этом фрагменте диалога (нет необходимости переопределять onCreateView()
)
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final ProgressDialog dialog = new ProgressDialog(getActivity());
//
dialog.setTitle(R.string.login_title);
dialog.setMessage(getString(R.string.login_message));
dialog.setIndeterminate(true);
dialog.setCancelable(false);
// etc...
return dialog;
}
Что касается отклонения этого фрагмента диалога из другого места, вам нужно получить FragmentManager
(изнутри следующего FragmentActivity
или Fragment
) и вызвать popBackStack()
(если вы не выполняете какую-либо другую транзакцию фрагмента тем временем).
Если между фрагментом диалога хода выполнения и последующим действием больше операций с фрагментами/фрагментами, вам, вероятно, понадобится один из других методов popBackStack(...)
, которые берут идентификатор или тег, чтобы вытащить все до вашего фрагмента диалога выполнения с стек.