Так что я пытаюсь использовать неопределенный индикатор выполнения в моем настраиваемом заголовке заголовка, чтобы показать любую фоновую работу.Сейчас мы используем асинхронную задачу, чтобы показать и скрыть индикатор выполнения, используя методы pre и post:
Вот класс, содержащий все:
открытый абстрактный класс QuadrosMobileActivity extends Activity {
protected static volatile ProgressBar progressHeader = null;
protected static int progressBarstate=ProgressBar.INVISIBLE;
//this method will launch respejcting oncreate logic for each activity
public abstract void initActivity();
public int getProgressBarstate(){
return progressBarstate;
}
public void setProgressBarstate(int state){
progressBarstate=state;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//set theme first for showing correct header
setTheme(getThemeId());
super.onCreate(savedInstanceState);
//in case the screen will have a header
if(getThemeId()!=R.style.CustomThemeNoHeader){
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(getLayoutId());
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_window_title);
//set text header
((TextView)findViewById(R.id.header_title)).setText(getWindowTitle());
progressHeader= (ProgressBar) findViewById(R.id.progresspinner);
progressHeader.setVisibility(getProgressBarstate());
}else {
setContentView(getLayoutId());
}
//execute activity logic
initActivity();
}
private class ProgressBarThread extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
progressHeader.setVisibility(ProgressBar.VISIBLE);
setProgressBarstate(ProgressBar.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
updateResultsInUi();
return null;
}
@Override
protected void onPostExecute(Void result) {
progressHeader.setVisibility(View.INVISIBLE);
setProgressBarstate(View.INVISIBLE);
}
}
} Это мой основной класс деятельности, откуда простираются все мои действия на экране.Проблема, с которой я столкнулся, заключается в том, что если я запускаю асинхронную задачу, индикатор прогресса становится видимым (все в Занятии A), и хотя это происходит, если я перехожу к другому занятию (B), индикатор выполнения все равно отображается правильно и скрывается после завершения фоновой работы.все правильное поведение.НО, если я нажму кнопку «Назад», предыдущее действие (A) будет отображаться с индикатором прогресса.Вот простая диаграмма:
start Activity A:
- запускает asynctask
- показывает индикатор выполнения
- работает в фоновом режиме
перейти к занятию B:
- индикатор прогресса все еще показывает
- завершает фоновую работу
- скрывает индикатор прогресса * правильное поведение
вернуться к занятию A:
- отображается индикатор прогресса * неверное поведение ...
Я пробовал это на методе onResume:
@Override
protected void onResume() {
super.onResume();
if(getThemeId()!=R.style.CustomThemeNoHeader){
System.out.println("visible: " + ProgressBar.VISIBLE+" : " + getProgressBarstate());
progressHeader.setVisibility(getProgressBarstate());
};
}
Но безрезультатно, могу ли я действительно использовать onResume для изменения состояния индикатора выполнения при нажатии кнопки назад???