如何知道对话框是否被破坏,关闭,解雇了?

时间:2018-10-27 20:05:39

标签: android android-asynctask android-dialogfragment android-dialog

我有一个活动,它将打开一个自定义对话框,该自定义对话框在创建后会启动一个异步任务,该任务将加载将显示的信息。

如果用户在完全加载之前关闭对话框,活动,应用程序或其他任何内容,我希望异步任务停止加载。

这就是我的做法:

活动:

new UsernamesListDialog().show(getSupportFragmentManager(), USERNAMES_LIST_DIALOG_TAG);

public class UsernamesListDialog extends AppCompatDialogFragment implements CompoundButton.OnCheckedChangeListener, View.OnClickListener, LoadFollowersTask.LoadFollowersListener {

  public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  new LoadFollowersTask(this, this.progressBar, this.progressCaption, APIFacade.getInstance().getLocalUser()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, APIFacade.getInstance());


        return v;
    }


public class LoadFollowersTask extends AsyncTask<APIFacade, Integer, Set<BasicUser>> {
  protected Set<BasicUser> doInBackground(APIFacade... api) {
     while (loaded.size() < totalToLoad && this.listener.isAlive()) {
//load stuff      
}

return result;

this.listener是自己的对话框,方法isAlive()是:

public boolean isAlive(){
return this.isVisible();
}

问题是:

由于任务是异步的,在对话框正确显示到界面之前,LoadFollowersTask可能会停留一会儿,在这种情况下,任务将自行停止并返回空结果。

因此,我需要将isAlive重新定义为从创建对话框到关闭对话框将返回true的值。

我应该使用哪种方法?

1 个答案:

答案 0 :(得分:1)

您应该尝试使用Dialog方法setOnShowListenersetOnDismissListener。 在类UsernamesListDialog的getDialog()内调用onViewCreated时,可以获取Dialog对象。

在显示Dialog时会调用

OnShowListener,因此您可以在其中运行AsyncTask。 当Dialog关闭时,将调用OnDismissListener,因此您可以取消任何未完成的AsyncTask。