как управлять неопределенным индикатором выполнения в заголовке при нажатии кнопки назад и переходе к предыдущему действию - PullRequest
0 голосов
/ 19 сентября 2011

Так что я пытаюсь использовать неопределенный индикатор выполнения в моем настраиваемом заголовке заголовка, чтобы показать любую фоновую работу.Сейчас мы используем асинхронную задачу, чтобы показать и скрыть индикатор выполнения, используя методы 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:

  1. запускает asynctask
  2. показывает индикатор выполнения
  3. работает в фоновом режиме

перейти к занятию B:

  1. индикатор прогресса все еще показывает
  2. завершает фоновую работу
  3. скрывает индикатор прогресса * правильное поведение

вернуться к занятию A:

  1. отображается индикатор прогресса * неверное поведение ...

Я пробовал это на методе onResume:

@Override
protected void onResume() {
    super.onResume();
    if(getThemeId()!=R.style.CustomThemeNoHeader){
        System.out.println("visible: " + ProgressBar.VISIBLE+" : " + getProgressBarstate());
        progressHeader.setVisibility(getProgressBarstate());

    };

}

Но безрезультатно, могу ли я действительно использовать onResume для изменения состояния индикатора выполнения при нажатии кнопки назад???

1 Ответ

0 голосов
/ 20 сентября 2011

Это метод, который я попробовал:

@Override
public void onRestart () 
{
    super.onRestart();
    if (getThemeId() != R.style.CustomThemeNoHeader)
    {
    Toast.makeText(this, "visible(0): " + ProgressBar.VISIBLE+" : Current :" + getProgressBarstate(),Toast.LENGTH_LONG).show();

    // doesnt work
    QuadrosMobileActivity.progressHeader.setVisibility(getProgressBarstate());

    // works
    ((TextView)findViewById(R.id.header_title)).setText("Tretas");
    }
}
...