При выполнении длительных операций, приложение должно развлекать пользователя анимированным индикатором прогресса. Если этого не делать, то он решит, что приложение зависло и скорее всего удалит его, т.к. по его мнению оно не доработанное.
Для реализации этой задачи можно в разных элементах интерфейса показывать виджет ProgressBar.
Показывать его можно, как в отдельном модальном окне, так и в различных средних и маленьких виджетах.
В данной статье я расскажу, как разместить эту анимацию в заголовке приложения, т.е. в элементе ActionBar и привязать её управление к текущему фрагменту.
Первым делом нужно создать свое меню для текущего фрагмента. Как это делается уже описано в данной статье.
Помещаем файл my_description_menu.xml в папку menu.
Со следующим содержимым:
В меню у нас будет всего один элемент, без картинки, с заголовком “Загрузка” и с id = download_pb.
Создадим файл разметки actionbar_progress.xml для нашего элемента в меню:
Чтобы у фрагмента было собственное меню, его нужно указать при инициализации (как указано в названной статье) или при создании выставить свойство setHasOptionsMenu в true.
Объявим класс меню в фрагменте:
private static Menu optionsMenu;
Его мы получим при создании меню:
При создании меню мы сразу установили разметку для единственного элемента.
Таким образом крутящийся индикатор уже появился в меню.
Чтобы завершить или начать новый прогресс напишем функцию:
Если мы в файле описания меню my_description_menu.xml задали у элемента значок (android:icon) , то после выполнения кода
refreshItem.setActionView(null);
Элемент покажет заданную в разметке иконку.
А код refreshItem.setVisible(false);
скрывает элемент из меню.
Чтобы реализовать саму кнопку, нужно написать метод фрагмента:
В итоге мы можем легко включить и выключить индикатор прогресса в нашем фрагменте, просто вызывая setProgressButtonState(true) и setProgressButtonState(false).