在保存文件之前,我试图设置按钮的文本。该文件需要一段时间才能保存。因此,当单击按钮时,似乎没有任何作用。我尝试将按钮设置为“正在保存...”,然后再进入保存文件功能,然后在完成后将其更改回。甚至试图显示进度对话框,但在功能完成后会显示出来。如何在功能启动之前获取要更改的文本或显示进度对话框?
fileExport.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
progress = new ProgressDialog(activity);
progress.setTitle(null);
progress.setMessage("Saving Device...");
progress.show();
fileExport.setText("Saving.....");
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
AlertDialog alert;
if (delegate.export()) { //save file
builder.setCancelable(false);
builder.setTitle("Export Successful");
builder.setMessage("Your settings were exported successfully to " + AppDelegate.path + ".");
builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alert = builder.create();
alert.show();
} else {
builder.setCancelable(false);
builder.setTitle("Export Unsuccessful");
builder.setMessage("Error! There was a problem exporting your settings. Please try again.");
builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alert = builder.create();
alert.show();
}
fileExport.setText("Export to File");
}
});
答案 0 :(得分:0)
问题是您将这两个进程都放在了同一线程上。这意味着在文件完成保存之前,它不会更新按钮的文本。查看异步任务http://reference.wolfram.com/language/tutorial/AsynchronousTasks.html, 将其作为AsyncTask来完成(当您需要更新UI时,这可能是一个更好的选择)
在活动中,创建Async类的实例并执行。
SaveData save = new SaveData();
save.execute();
将AsyncTask子类作为活动中的私有类
private class SaveData extends AsyncTask<String, Void, Boolean>{
@Override
protected Boolean doInBackground(String... params) {
// your background code here. Don't touch any UI components
if(your code worked...)
return true;
else
return false;
}
protected void onPostExecute(Boolean result) {
//This is run on the UI thread so you can do as you wish here
if(result)
Toast successful
else
Toast unsuccessful
}
}