我是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元素添加新参数?
或者方法不同。
最好的问候
答案 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.