Intereting Posts
Android: Когда использовать Service vs Singleton? IntelliJ IDEA публикует приложение Android одним щелчком мыши? Android view layout_width – как программно изменить? Держите деятельность всегда поверх стека или в фокусе, когда запугивают приложения-запугивающие приложения? В чем разница между передачей этого класса и ClassName.this из обработчика события при передаче в конструктор Intent? Инструменты: заменить не замену в манифесте Android Создать файл свойств с помощью gradle Dagger 2 Custom Scope для каждого фрагмента (или Activity и т. Д.) Как я должен кодировать, чтобы противостоять «одноразовому пиратству»? HttpURLConnection: java.lang.IllegalStateException: уже подключено Текст текстового текста Android обрезается по сторонам пользовательским шрифтом Хотите создать плагин в Cocos2d для моего SDK Как я читаю / записываю шестнадцатеричные байты из потока ввода / вывода в BluetoothChat? Нет статического метода setOnApplyWindowInsetsListener исключение в Android Потребление приложения Android App

Замена значка меню ActionBar с неопределенным шагом ProgressBar

Я хотел бы добавить неопределенный индикатор выполнения в Honeycomb ActionBar, так что в любое время, когда пользователь нажимает «Обновить», значок обновления временно превращается в неопределенный индикатор выполнения, пока задача не завершится. Приложение электронной почты делает это уже, но я не могу понять, как это сделать.

Любой совет?

Solutions Collecting From Web of "Замена значка меню ActionBar с неопределенным шагом ProgressBar"

Трудно сказать, как это работает приложение электронной почты, но вы можете оставаться простым и просто вызвать setIcon с идентификатором StateDrawable XML StateDrawable , а затем просто изменить состояние с помощью таймера.

Чтобы прояснить ответ Jon O, ключ состоит в том, чтобы установить и отключить действие для действия обновления. Это работает как в ActionBarSherlock, так и в собственной панели действий 4.x. В следующем фрагменте будет отображаться неопределенный вид в верхней части значка обновления, предполагая, что пункт меню обновления имеет идентификатор «refresh_option», а макет замены (который имеет ProgressBar) находится в макете «progress_wheel»:

  MenuItem item = abmenu.findItem(R.id.refresh_option); LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View abprogress = inflater.inflate(R.layout.progress_wheel, null); item.setActionView(abprogress); 

Отсоедините представление прогресса, и значок обновления вернется к видимости:

  item.setActionView(null); 

См. Более подробный пример github.

Оказывается, Google опубликовал пример того, как делать это в рамках своего более широкого проекта совместимости ActionBarCompat. Посмотрите .

Чтобы упростить ответ larham1 : вам даже не нужно раздувать новое представление действий, потому что MenuItem имеет метод, который принимает идентификатор макета действия, поэтому вы можете просто написать:

 item.setActionView(R.layout.progress_bar); 

Я использую код, предоставленный по оригинальной проблеме здесь: https://github.com/JakeWharton/ActionBarSherlock/issues/425

За исключением android:layout_width и android:layout_height (в actionbar_indeterminate_progress.xml) Я использую 32dp ; Так как это было сделано в ActionBarCompat: http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html

Вы можете легко это сделать:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh: item.setActionView(new ProgressBar(this)); break; } return super.onOptionsItemSelected(item);