2016-09-20 28 views
-1

私のダイアログが自分の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(); 
    } 
} 

本当に何が問題なのか知りたいです。 onLoadingDialog()をonCreateView()に配置すると、ダイアログが表示されますが、onCreateView()内に配置するとダイアログが閉じないという問題があります。助けてください。

+1

bar =新しいProgressDialog(getActivity());ここではコンテキストのオブジェクトを取得して関数に渡し、非同期で呼び出すときはコンテキストを渡します –

+0

質問するのではなく、隠す/表示するプログレスバーのメソッドを検索してください。あなたは簡単にコードスニペットを得るでしょう –

答えて

2

、AsynTaskの内側にあなたのダイアログが表示されないために

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

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

に問題があなたのかもしれない変更しようとしますif(bar == null){状態、当時のためbarオブジェクトはnullにはなりません。あなたがダイアログを閉じるときには、それをnullに初期化する必要があります。と書いてくださいbar.show();このコード行はif(...)の状態です。

+0

大丈夫です。コメントのためのtq。後で試してみてください –

+0

@HoeLuenあなたのご意見をお待ちしております –

+0

ああ。できます。 tq。 –

0

としてPreetika Kaurさんは、あなたがそれ以外のバーが常にnullなりますshowLoadingDialog()Contextオブジェクトを渡すとbar = new ProgressDialog(yourContextObject);原因を呼び出す必要があります示唆しました。 のonCreate中にあなた)(解任問題については

関連する問題