2012-11-05 3 views
2

Мне нужно обновить фрагмент диалога выполнения изнутри AsyncTask. Я знаю, как это сделать, используя старый ProgressDialog, но теперь этот способ отображения диалогов устарел, и я пытаюсь сделать то же самое с фрагментами.Как обновить фрагмент ProgressDialog

Это фрагмент кода:

public static class CustomProgressDialogFragment extends SherlockDialogFragment { 

     static CustomProgressDialogFragment newInstance(Object... params){ 
      CustomProgressDialogFragment df = new CustomProgressDialogFragment(); 
      Bundle bundle = new Bundle(); 

      // Populate bundle with params (not shown) 

      df.setArguments(bundle); 
      return df; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      this.setCancelable(false); 
      int style = DialogFragment.STYLE_NORMAL, theme = 0; 
      setStyle(style,theme); 
     } 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      Bundle bundle = this.getArguments(); 

      ProgressDialog dialog = new ProgressDialog(getActivity()); 

      // Get params from bundle and customize dialog accordingly (not shown) 

      dialog.setCancelable(false); 
      dialog.setIndeterminate(false); 
      dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

      return dialog; 
     } 
    } 

и это, как я показываю его:

FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();  
    CustomProgressDialogFragment dialogFragment = CustomProgressDialogFragment.newInstance(<My params here>); 
    ft.disallowAddToBackStack(); 
    ft.add(dialogFragment, stringSet.tag);  
    ft.commitAllowingStateLoss(); 

Теперь мне нужно позвонить incrementProgressBy через диалог с AsyncTask. Есть ли способ получить базовый диалог из FragmentManager? Каким будет правильный способ сделать это? (Я не хочу утечки ссылок, если диалоги воссоздаются).

Заранее спасибо.

ответ

3

Этого можно достичь, позвонив по телефону DialogFragment.getDialog(). DialogFragment может быть получен как обычно, с FragmentManager.findFragmentByTag.

Смежные вопросы