Изменение вида элемента меню на панели действий

Я пытаюсь реализовать кнопку обновления в своем приложении, чтобы позволить пользователю вручную повторно синхронизироваться с веб-сервер. Код работает, но у меня возникли проблемы с определением представлений действий (по крайней мере, я думаю, что это то, что я должен использовать).

Мой пункт меню здесь:



Проблема в том, , он всегда показывает ProgressBar. Мне было интересно, работает ли он как виджет поиска (единственный пример, который я действительно вижу в Интернете), и добавил тег collActionViewк showAsAction, и это предотвратило его появляется сразу. Однако, когда я нажимаю кнопку обновления, значок исчезает (хорошо), но также исчезает заголовок на панели действий, а индикатор выполнения появляется в левой части окна, где раньше был заголовок. что я хотел.

В качестве последней попытки я попытался добавить это в свой код и удалить 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-код кнопки выглядит следующим образом:



Мне просто трудно сослаться на это представление IconSwitcher.

Редактировать 2: У меня вообще проблемы со ссылкой на пункт меню.

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
refresh.setVisible(false);

Также дает мне нулевой указатель, когда я пытаюсь установить видимость. Что не так с моими ссылками?

7
задан Community 23 May 2017 в 12:18
поделиться