我有一个按钮,按下它后,onClick() 将处理用户的请求。但是,这需要一点时间,所以我希望在按下此按钮后立即显示“请稍候,正在处理...”的视图,而它的 OnClickListener 会做它的事情。
我的问题是,我放在 onClick() 开头的“请稍候,正在处理...”,仅在整个 onClick() 完成后才出现。换句话说,在整个处理完成之后。所以,我想知道,在实际处理开始之前,如何让视图显示“请稍候,正在处理......”?
我有一个按钮,按下它后,onClick() 将处理用户的请求。但是,这需要一点时间,所以我希望在按下此按钮后立即显示“请稍候,正在处理...”的视图,而它的 OnClickListener 会做它的事情。
我的问题是,我放在 onClick() 开头的“请稍候,正在处理...”,仅在整个 onClick() 完成后才出现。换句话说,在整个处理完成之后。所以,我想知道,在实际处理开始之前,如何让视图显示“请稍候,正在处理......”?
你可以通过只使用 AsyncTask 来做到这一点,而无需处理任何其他事情。
首先在“onPreExecute”上创建新的 AsyncTask 类更改 ui 以显示您正在处理某事
其次,在“doInBackground”方法上完成所有后端耗时的工作
(不要从这里调用任何 ui 更新方法)
第三次更改您的用户界面以显示该过程已完成或您想做的任何事情。
yourUiButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new NewTask().execute();
}
});
class NewTask extends AsyncTask<String, Void, Task>{
@Override
protected void onPreExecute() {
super.onPreExecute();
//this part runs on ui thread
//show your "wait while processing" view
}
@Override
protected Task doInBackground(String... arg0) {
//do your processing job here
//this part is not running on ui thread
return task;
}
@Override
protected void onPostExecute(Task result) {
super.onPostExecute(result);
//this part runs on ui thread
//run after your long process finished
//do whatever you want here like updating ui components
}}
你需要这样的东西
public void onClick(View v){
//show message "Please wait, processing..."
Thread temp = new Thread(){
@Override
public void run(){
//Do everything you need
}
};
temp.start();
}
或者如果你想让它在 UIThread 中运行(因为它是一项密集的任务,我不推荐这个)
public void onClick(View v){
//show message "Please wait, processing..."
Runnable action = new Runnable(){
@Override
public void run(){
//Do everything you need
}
};
v.post(action);
}
将您的代码放在一个线程中并在那里使用进度对话框......
void fn_longprocess() {
m_ProgressDialog = ProgressDialog.show(this, " Please wait", "..", true);
fn_thread = new Runnable() {
@Override
public void run() {
try {
// do your long process here
runOnUiThread(UI_Thread);//call your ui thread here
}catch (Exception e) {
e.printStackTrace();
}
}
};
Thread thread = new Thread(null, thread1
"thread1");
thread.start();
}
then close your dialogue in the UI thread...hope it helps..
异步任务。
在另一个线程上进行处理,以便 UI 可以显示您的对话框。
// Show dialog
// Start a new thread , either like this or with an ASyncTask
new Thread(){
public void run(){
// Do your thang
// inform the UI thread you've finished
handler.sendEmptyMessage();
}
}
处理完成后,您需要回调 UI 线程以关闭 oyur 对话框。
Handler handler = new Handler(){
public void handleMessage(int what){
// dismiss your dialog
}
};