我有一个场景,我需要AsyncTask之间的用户输入,但doInBackground无法显示UI。 场景: 按钮点击,将有服务电话,根据服务电话的结果,我想显示确认对话框,如果用户点击是,那么将有另一个服务电话,如果用户点击否则接着不同的服务电话。面对显示ProgressDialog的问题。
计划工作流程:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bool result = Method1();
if(result){
ShowConfirmation(new YesCallBackHelper() {Method2();}, new NoCallBackHelper() {Method3();});
}
else{
Method3();
}
}
});
private bool Method1()
{
return ServiceCall1();
}
private bool Method2()
{
return ServiceCall2();
}
private bool Method3()
{
return ServiceCall3();
}
答案 0 :(得分:0)
onPreExecute() {
// some code #1
}
doInBackground() {
runOnUiThread(new Runnable() {
public void run() {
// some code #3 (Write your code here to run in UI thread)
}
});
}
onPostExecute() {
// some code #3
}
你可以使用runonuithread来操作来自asynctask的UI
答案 1 :(得分:0)
您无法在doInBackgroud()
方法中处理用户互动。但是,您可以执行onPostExecute()
方法
例如:
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
在后台计算完成后,在UI线程上调用OnPostExecute。背景计算的结果作为参数传递给该步骤。 AsyncTask中的第三个参数是您在onPostExecute()
文档链接:here
干杯!