在android studio中显示和隐藏对话框

时间:2016-09-20 08:48:56

标签: java android android-asynctask

我遇到的情况是我的对话框没有显示在我的asyncTask中。 下面的代码是我的asyncTask

private class AsyncCallListWS extends AsyncTask<Void, Void, Void> {
@Override
    protected void onPreExecute() {
        Log.i(TAG, "--------------------------------------------------");
        Log.i(TAG, "pending ws: onPreExecute");
        showLoadingDialog();
    }

    @Override
    protected Void doInBackground(Void... params) {
        Log.i(TAG, "pending ws: doInBackground");
        //listDataParent = new ArrayList<Tn_Parent>();
        listPending();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        Log.i(TAG, "Call pending ws: onPostExecute");
        dismissLoadingDialog();

        //Log.i(TAG, "I am not up there "+status.toString());
        if(getContext()!=null) {
            //adapter = new Tn_ListViewAdapter(getActivity(), newList, selectAll);
            //listView.setAdapter(adapter);

            lvAdapter = new Tn_ListViewAdapter(getActivity(), lvList, selectAll);
            listView.setAdapter(lvAdapter);
            // .............. below is not needed .....................
            //listAdapter = new Tn_ExpandableAdapter(listDataParent,getContext(), selectAll);
            //expListView.setAdapter(listAdapter);
        }
    }
}

以下是我的对话框代码。该对话框在其他课程中运作良好。

public void showLoadingDialog() {

    if (bar == null) {
        bar = new ProgressDialog(getActivity());
        bar.setMessage(getString(R.string.loading_message));
        //bar.setCanceledOnTouchOutside(getRetainInstance());
        bar.setCanceledOnTouchOutside(false);
    }
    bar.show();
}

public void dismissLoadingDialog() {

    if (bar != null && bar.isShowing()) {
        bar.dismiss();
    }
}

我真的想知道有什么问题。当我在onCreateView()中放入showLoadingDialog()时会显示该对话框,但问题是如果我将它放在onCreateView()中,对话框将不会被忽略。请帮忙。

2 个答案:

答案 0 :(得分:2)

对于 onCreate 中的解雇()问题,请尝试更改

public void dismissLoadingDialog() {
  if (bar != null && bar.isShowing()) {
      bar.dismiss();
  }
}

public void dismissLoadingDialog() {
  if (bar != null) {
      bar.dismiss();
      bar = null;
  }
}

AsynTask 中没有显示对话框的问题可能是你的 if(bar == null){条件,因为那时你的 bar < / strong>对象不会为null。因此,当您解除对话框时,必须将其初始化为 null 。请在 if(...)条件中写下 bar.show(); 这行代码。

答案 1 :(得分:0)

由于 Preetika Kaur 建议您将Context对象传递给showLoadingDialog()并致电bar = new ProgressDialog(yourContextObject);,否则该栏将始终为null