如何从另一个类中的另一个方法更新ANDROID中的progressBar

时间:2019-05-09 21:43:13

标签: android user-interface progress-bar

我是Android的newby,我想为用户提供更专业的外观和感觉。

我有一个将数据导出到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 UI元素添加新参数?

或者方法不同。

最好的问候

2 个答案:

答案 0 :(得分:1)

使用AsyncTask,有方法

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

onProgressUpdate/// update ui

答案 1 :(得分:0)

您要在单独的线程上创建烤面包,而没有使用show()方法显示它。其次,没有代码可用于在流程结束时显示烤面包消息,而您只是在遍历列表时创建烤面包。在单独的线程中创建这样的吐司。

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

如果您正在使用服务来处理列表以创建Excel,则可以发送广播接收器并将广播发送到活动,该广播具有包含过程完成状态的额外值。在您的活动中,收听广播,并使用该值更新进度栏。您可以在Broadcasts overview上查看有关广播的更多信息。第二种选择是,如果您在项目中使用RxJava,则可以创建事件总线,然后将其用于将事件从ensayoController类发送到活动中。您可以在Super simple event bus using RxJava2.

上了解有关事件总线的更多信息。
相关问题