Как обновить progressBar в ANDROID из другого метода в другом классе - PullRequest
0 голосов
/ 10 мая 2019

Я новичок в Android, и я хочу, чтобы пользователь выглядел более профессионально.

У меня есть процесс, который экспортирует данные в файл Excel, но это занимает слишком много времени.

Я запускаю метод следующим образом:

  ...  
                  // TODO Auto-generated method stub
                    System.out.println(confirm);
                    if (confirm){

                        new Thread(new Runnable() {
                            @Override
                            public void run() {

                                ensayoController.exportarEnsayoExcel(list); //<- this takes from 2 to 3 minutes!
                                for (Ensayo e: list){
                                    Toast.makeText(ExportaEnsayosActivity.this, "Ensayo " + e.getDescripcion() + " exportado!", Toast.LENGTH_LONG);
                                    System.out.println("Ensayo " + e.getDescripcion() + " exportado!");
                                }
                                AlertDialog alertDialog = new AlertDialog.Builder(ExportaEnsayosActivity.this).create();
                                alertDialog.setTitle("Atencion!");
                                alertDialog.setMessage("Finalizó la exportacion!");
                                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int which) {
                                                dialog.dismiss();
                                            }
                                        });
                                alertDialog.show();
                            }
                        }).run();

                    }
...

В конце я добавил сообщение, чтобы пользователь знал, когда задача завершена.

У меня 2 проблемы; 1) Тост никогда не показывает сообщение. 2) Я хочу создать и обновить индикатор выполнения из метода «exportarEnsayoExcel».

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

Или подход другой.

С наилучшими пожеланиями

Ответы [ 2 ]

1 голос

Используйте AsyncTask, есть метод

doInBackground/// do something job in backgorund,call publishProgress

onProgressUpdate/// update ui
0 голосов
/ 10 мая 2019

Вы создаете тост в отдельном потоке и не показываете его, используя метод show(). Во-вторых, нет кода для отображения сообщения о тосте в конце вашего процесса, вы просто создаете тост при итерации по списку. Создайте тост, подобный этому, в отдельной теме.

ExportaEnsayosActivity.this.runOnUiThread(new Runnable() {
   Toast.makeText(ExportaEnsayosActivity.this, "Your message", Toast.LENGHT_SHORT).show();
}) 

Если вы используете службу для обработки списка для создания Excel, вы можете отправить получателя широковещания и отправить широковещание для действия с дополнительным значением, которое содержит статус завершения процесса. В своей деятельности слушайте трансляцию и обновляйте индикатор выполнения этим значением. Вы можете увидеть больше о трансляциях здесь Обзор трансляций . Второй вариант: если вы используете RxJava для своего проекта, вы можете создать шину событий, которая затем будет использоваться для отправки событий вашей деятельности из вашего класса ensayoController. Вы можете прочитать больше о шине событий здесь Супер простая шина событий, использующая RxJava2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...