Я пытаюсь реализовать кнопку обновления в моем приложении, чтобы позволить пользователю вручную выполнить повторную синхронизацию с веб-сервером. Код работает, но у меня возникают проблемы с определением представлений действий (по крайней мере, я думаю, что это то, что я должен использовать).
Мой пункт меню здесь:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:actionViewClass="android.widget.ProgressBar">
</item>
Проблема в том, что он всегда показывает ProgressBar. Я подумал, работает ли он как поисковый виджет (единственный пример, который я действительно вижу в Интернете) и добавил тег collapseActionView
к showAsAction
, и это не позволило ему сразу же появиться. Однако, когда я нажимаю кнопку обновления, значок исчезает (хорошо), как и заголовок на панели действий, и индикатор ProgressBar появляется в левой части окна, где раньше находился заголовок. Тоже не то, что я хотел.
В качестве последнего усилия я попытался добавить это в свой код и удалить actionViewClass
из XML:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);
Это тоже не сработало, выдавая ошибку нулевого указателя на setActionView
.
Мне нужно решение, которое я могу вызвать из любой функции (в начале есть период автосинхронизации, который я хотел бы, чтобы ProgressBar также отображал в течение этого времени), и после этого смог бы вернуть его в статический значок.
Я пытался прочитать этот вопрос , но мне трудно понять, что означает ответ. Я чувствую, что пытаюсь сделать именно то, что написано, но, наверное, нет. Любая помощь очень ценится.
Редактировать: По предложению шастракси.
public class IconSwitcher extends LinearLayout{
public IconSwitcher(Context context) {
super(context);
ProgressBar pb = new ProgressBar(context);
ImageView iv = new ImageView(context);
addView(iv);
addView(pb);
}
}
Пока это мой класс. Тем не менее, когда я пытаюсь сослаться на это:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();
Я получаю ошибку нулевого указателя. на создание IconSwitcher. Кнопка XML выглядит следующим образом:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:actionViewClass="IconSwitcher">
</item>
Мне просто трудно сослаться на этот IconSwitcher View.
Редактировать 2: У меня возникли проблемы с ссылкой на пункт меню вообще.
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
refresh.setVisible(false);
Также дает мне нулевой указатель, когда я пытаюсь установить видимость. Что не так с моими ссылками?