Задать вопрос
@Evgenij_Popovich

Сломанный вид у ActionBar после вызова invalidateOptionsMenu, setSupportProgressBarVisibility и notifyDataSetChanged?

Заметил неприятное поведения у ActionbBar (ActionBarSherlock в частности). В приложении я использую FEATURE_INDETERMINATE_PROGRESS который показывается при выполнении некоторых действий. Также когда показывается прогресс должен прятаться action refresh. Чтобы спрятать его приходится вызывать invalidateOptionsMenu, который, в свою очередь, вызывает onPrepareOptionsMenu где я уже могу изменить видимость

Override
public void onPrepareOptionsMenu(Menu menu)
{

    reinitMenu(menu);

    super.onPrepareOptionsMenu(menu);
}

 
protected void reinitMenu(Menu menu)
{

    menu.findItem(R.id.menu_refresh).setVisible(

        !getFActivity().isLoading());
}



Когда загружаются данные через AsyncTask в методе onPostExecute вызывается последовательно notifyDataSetChanged у модели привязанной к ListView, setSupportProgressBarVisibility и invalidateOptionsMenu.

    Override

        protected void onPostExecute(Void result)

        {

            super.onPostExecute(result);

            for (int i = 0; i < 10; i++)

            {

                adapter.items.add(i);

            }

            adapter.notifyDataSetChanged();

            activity.stopLoading();

        }



    void stopLoading()

    {

        if (loaders.decrementAndGet() == 0)

        {

            setSupportProgressBarIndeterminateVisibility(false);

            invalidateOptionsMenu();

        }

    }



Этот код во многих случаях «ломает» вид у ActionBar. Пропадают иконки, появляется пустое место справа вместо них

Ожидаемый вид:
de25ca5b38084f0cfddcbbea7cf2c3db.png


На самом деле ActionBar «ломается» и вид получается такой (исчезает последняя иконка):
19eeed97f2e4cb0574369dd210db28d4.png


Тут, вообще, вместо трех иконок видно одну и пустое место справа
1fe85c4cff4772ce84fea80c68815349.png


Если убрать вызов adapter.notifyDataSetChanged(); то ActionBar будет выглядеть правильно. Но подозреваю, что это не единственная возможная причина такой «поломки»,


Быть может кто-нибудь сталкивался с подобным и знает как правильно бороться с этой проблемой?


Ссылка на исходник проекта, демонстрирующего проблему goo.gl/ZbMTU

Удалось воспроизвести на эмуляторе версии 2.1 и на устройстве с Android ICS 4.0.3 на борту.
  • Вопрос задан
  • 3572 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы