2016-09-20 99 views
-1

我的情况是我的对话框不显示在我的asyncTask中。 下面的代码是我的AsyncTask在android studio中显示和隐藏对话框

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()中,对话框不会消失。请帮忙。

+1

bar = new ProgressDialog(getActivity());这里采取上下文的对象,并在函数中传递它,当你在异步调用它通过上下文 –

+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){ condition,因为那时候你的bar对象不会为空。因此,当你解散对话时,你必须将它初始化为null。并请写bar.show();这行代码在之内if(...)条件。

+0

好吧。 tq的评论。稍后会试一试 –

+0

@HoeLuen肯定会等你的反馈 –

+0

呀。有用。 TQ。 –

0

由于Preetika考尔建议你应该通过一个Context对象给你showLoadingDialog(),并呼吁bar = new ProgressDialog(yourContextObject);原因,否则酒吧将永远是null