0

私は互換性ライブラリv4 +を使用しています。 他のthreadsdev guideに続いて、それを作成するアクティビティから進捗ダイアログを呼び出すフラグメントを作成しようとしています。 このアプローチでは、AsyncTaskの事前実行で表示されたDialogFragmentを使用して、実行後に却下(削除)します。 結果として、私は任意のダイアログを取得しません....まあ、ダイアログは、thread.sleepの最後にほんの数秒間しか表示されません。android:progress AsyncTaskの先頭にDialogFragmentが表示されない

誰かが私が間違っている場所を教えてもらえますか?

私はここに私のフラグメントを持っている:

public class GroupsDetailsFragment extends BaseFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_groups_details, container, false); 

     return v; 
    } 



    @Override 
    public void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     loadPage(); 
    } 



    public void loadPage() { 
     Log.i(TAG, "loadPage"); 
     new LoadPageTask(getBaseActivity()).execute(); 
    } 

    public void executeLoadPagePreExecution() {Log.i(TAG, "executeLoadPagePreExecution"); } 
    public void executeLoadPageInBackground() {Log.i(TAG, "executeLoadPageInBackground"); } 
    public void executeLoadPagePostExecution() {try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }Log.i(TAG, "executeRefreshPostExecution"); } 



    protected class LoadPageTask extends AsyncTask<Void, Void, String> { 
     private Context context; 

     public LoadPageTask(Context context) { 
      super(); 
      this.context = context; 
     } 

     @Override 
     protected void onPreExecute() { 
      // before the network request begins, show a progress indicator 
      getBaseActivity().showLoadingProgressDialog(context); 
      executeLoadPagePreExecution(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      String result = executeLoadPage(); 
      Log.i(TAG, "error message result: " + result); 
      return result; 
     } 


     // Returns null if Everything is OK. Error Message if any problem. 
     private String executeLoadPage() { 
      try { 
       executeLoadPageInBackground(); 
       return null; 
      } catch (Exception e){ 
       Log.w(TAG, e.getMessage(), e); 
       return(e.getMessage()); 
      } 
     } 

     @Override 
     protected void onPostExecute(String message) { 
      executeLoadPagePostExecution(); 
      getBaseActivity().dismissProgressDialog(); 
      if (message!=null){ 
       Utility.showMessageAlertDialog(message, context); 
      } 
     } 
    } 

} 

とフラグメントdispays FragmentActivityの内部クラスですProgressDialogFragment:

public static class ProgressDialogFragment extends DialogFragment { 


     public static ProgressDialogFragment newInstance(String title, String message) { 
      ProgressDialogFragment fragment = new ProgressDialogFragment(); 
      Bundle args = new Bundle(); 
      args.putString("title", title); 
      args.putString("message", message); 
      fragment.setArguments(args); 

      return fragment; 
     } 

     @Override 
     public ProgressDialog onCreateDialog(Bundle savedInstanceState) { 
      String title = getArguments().getString("title"); 
      String message = getArguments().getString("message"); 

      ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
      progressDialog.setTitle(title); 
      progressDialog.setMessage(message); 

      progressDialog.show(); 

      return progressDialog; 
     } 
    } 


    public void showProgressDialog(String title, String message) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     Fragment prev = fragmentManager.findFragmentByTag("progress dialog"); 
     if(prev!=null) { 
      fragmentTransaction.remove(prev); 
     } 
     fragmentTransaction.addToBackStack(null); 

     DialogFragment newFragment = ProgressDialogFragment.newInstance(title, message); 
     newFragment.show(fragmentManager, "progress dialog"); 
     //fragmentTransaction.commit(); 
    } 

    public void removeProgressDialog() { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     Fragment prev = fragmentManager.findFragmentByTag("progress dialog"); 
     if(prev!=null) { 
      fragmentTransaction.remove(prev); 
     } 
     fragmentTransaction.commit(); 
    } 
+0

setprogresstateメソッドはどうですか?また、basefragmentクラスの外でダイアログ・フラグメントをどのように使用しますか? getSupportFragmentManagerを渡すことはできますか? – Maxrunner

答えて

0

通常あなたがUIスレッドを一時停止するべきではありませんが。では、Thread.Sleep()をdoInBackground()に移動する方法はありますか?これはあなたのために働きますか?仕事は(だけではないUIスレッド)ワーカースレッド上で行われる場合

+0

はい、私はそれを知っています。それはただのテストだった...しかし、ちょうどあなたの答えの後の好奇心から私はそれに行くことを決めた。そして面白い(少なくとも私の理解のために)それは働いた。誰かがなぜ私を説明することはできますか? – virtual82

0

doInBackGroundがあり、onPostExacuteは、メインUIに話す何..です

0

は、私はあなたが

を呼ぶべきであるとは思わない理由です

onCreateDialog(...)内のprogressDialog.show()

関連する問題