在OnCreate方法中,我调用了3个AsyncTask,它基本上填充了3个Spinners的数据。我需要的是我应该禁用“登录”按钮,直到完成所有3个任务。我怎样才能做到这一点?
new SpinnerDataFetcher("GetFreeDrivers1",(Spinner)findViewById(R.id.Spinner_1)).execute();
new SpinnerDataFetcher("GetFreeDrivers2",(Spinner)findViewById(R.id.Spinner_2)).execute();
new SpinnerDataFetcher("GetFreeDrivers3",(Spinner)findViewById(R.id.Spinner_3)).execute();
答案 0 :(得分:0)
为此,您必须在致电Button
之前停用new Spinner1DateFetcher
并从Second
方法Spinner1DateFetcher
拨打onPostExecute
并与Third Spinner
方法相同在Third Spinner
onPostExecute
设置Button
至Enable
..
禁用按钮使用
Button.setEnabled(false);
和启用按钮使用
Button.setEnabled(true);
修改:
对于参数检查,您必须添加Constuctor
并检查条件如下。
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
public MyAsyncTask(boolean showLoading) {
super();
// do stuff
}
// doInBackground() et al.
}
答案 1 :(得分:0)
使用对创建它的Activity / Fragment的引用初始化您的AsyncTask实例。然后在onPostExecute完成时发出信号
e.g。
2 > 100
答案 2 :(得分:0)
只需增加与完成AsyncTask
的次数相对应的数字。
int s = 0;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SpinnerDataFetcher(){
@Override
protected void onPostExecute(....) {
super.onPostExecute(...);
s++;
check();
}
}.execute();
new SpinnerDataFetcher(){
@Override
protected void onPostExecute(....) {
super.onPostExecute(...);
s++;
check();
}
}.execute();
new SpinnerDataFetcher(){
@Override
protected void onPostExecute(....) {
super.onPostExecute(...);
s++;
check();
}
}.execute();
}
public void check(){
if(s >=3){
s= 0;
// enable button here
}
}
答案 3 :(得分:0)
有多种方法可以实现这一目标。
实现此目的的直接方法是创建一个触发UI更新的计数器。
final InterfaceTrigger trigger = new InterfaceTrigger();
new AsyncTask<>() {
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
trigger.finishJob();
if (trigger.isTimeToUpdateUi()) {
// TODO update your UI
}
}
};
public class InterfaceTrigger {
private static final int THRESHOLD = 3;
private int counter;
public synchronized void finishJob() {
counter++;
}
public synchronized boolean isTimeToUpdateUi() {
return counter == THRESHOLD;
}
}
另一种方法是使用CyclicBarier
和ExcutorService
机制。