Android OnClickListener 更改按钮文本或显示程序



我正在尝试在保存文件之前设置按钮的文本。该文件需要一段时间才能保存。因此,当单击按钮时,它似乎没有执行任何操作。我尝试将按钮设置为保存...在转到保存文件功能之前,然后在完成后将其更改回来。甚至尝试显示进度对话框,但它在功能完成后显示。如何在函数启动之前显示要更改的文本或显示进度对话框?

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");
}
});

问题是您将这两个进程放在同一个线程上。这意味着在文件完成保存之前,它不会更新按钮的文本。查看异步任务 http://reference.wolfram.com/language/tutorial/AsynchronousTasks.html, 以作为 AsyncTask 执行此操作(当您需要更新 UI 时,这可能是更好的选择(

在活动中,创建异步类的实例并执行。

SaveData save = new SaveData();
save.execute();

子类异步任务作为活动中的私有类

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
}
}

最新更新