Показывать прогресс окна, но не прогресс ActionBar (с использованием библиотеки совместимости v7)

Я видел, как несколько человек пытались показать неопределенный индикатор выполнения, и это проблема, противоположная моей.

Что я хочу, так это то, что когда приложение начинает работать, пользователь видит неопределенный индикатор выполнения в верхней части Window. Затем уходит, когда работа завершена.

Я использую библиотеку app compat v7. Мой Activity расширяет android.support.v7.app.ActionBarActivity.

Код, который у меня есть в моем Activity.onCreate():

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    setContentView(R.layout.main);

    ...
}

Затем, когда начинается работа (во фрагменте, а не в основном потоке):

((ActionBarActivity) getActivity()).setSupportProgressBarIndeterminateVisibility(true);

Затем, когда работа завершена:

((ActionBarActivity) getActivity()).setSupportProgressBarIndeterminateVisibility(false);

Два любопытных поведения, которые я не могу объяснить. Во-первых, на setSupportProgressBarIndeterminateVisibility(true) отображается прогресс Window (что я и хочу) и отображается круглый индикатор выполнения на панели действий.

при запуске поиска

Во-вторых, на setSupportProgressBarIndeterminateVisibility(false) прогресс Window скрывается (ура) и все... круглая полоса прогресса остается видимой...

по завершении поиска

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

Любая помощь, объясняющая это поведение, была бы отличной. Спасибо!!


person xbakesx    schedule 08.01.2014    source источник


Ответы (1)


Для первого выпуска:

Из приведенного кода это не очевидно, но вызовы setSupportProgressBarIndeterminateVisibility вызывались из фонового потока. Если я перенесу этот код в поток пользовательского интерфейса, все будет работать без глюков пользовательского интерфейса.

По второму вопросу:

Кажется, что поведение по умолчанию должно состоять в том, чтобы показывать круговой индикатор выполнения на панели действий. Не совсем уверен, почему также отображается прогресс в верхней части активности. Вы можете скрыть прогресс панели действий с помощью стиля, но я отказался от этого перед тестированием на старых платформах Android.

person xbakesx    schedule 21.01.2014