ProgressBar не отображается при использовании другого потока - PullRequest
0 голосов
/ 02 апреля 2020

Я делаю круговой неопределенный progressBar видимым, а затем запускаю Thread, что может занять несколько секунд (я попробовал AsyncTask, но он не сработал, возможно, потому, что внутри метода запущен другой AsyncTask). Тем не менее, progressBar становится видимым только после завершения потока. Как сделать его видимым перед запуском потока, чтобы пользователь мог видеть, что что-то происходит?

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

  //this is the Thread class
  private static final class LoadingMolecules extends Thread{
        private Intent intent;
        private ArrayList<Integer> groups;
        Context context;
        QuizProvider quizProvider;

    public LoadingMolecules (Intent intent,ArrayList<Integer> groups, Context context ){
        this.intent = intent;
        this.groups = groups;
        this.context = context;
    }

    @Override
    public void run() {
        quizProvider = new QuizProvider(groups, context);
        //inside next method is the asyncTask
        quizProvider.loadAllCompounds();
    }


}


//there is the code running
progressBar.setVisibility(View.VISIBLE);
        LoadingMolecules lm = new LoadingMolecules(intent, groups, this);
        lm.start();
        try {
            lm.join();
        }catch (InterruptedException ignore){

        }
        intent.putExtra("quizProvider", lm.quizProvider);
        startActivity(intent);
        finish();

1 Ответ

0 голосов
/ 02 апреля 2020

Вы должны:

  1. увидеть ход выполнения.
  2. запустить фоновый поток.
  3. скрыть процесс выполнения в потоке пользовательского интерфейса.

такой, что:

progress.visibility = View.VISIBLE
AppController.getInstance().getAppExecutors().diskIO().execute(() -> {
   //do stuff
    runOnUiThread(() -> {
         //do stuff
         progress.visibility = View.GONE
    });

});
...