2015-09-16 3 views
0

J'utilise une classe qui étend DialogFragment, et dans cette classe j'utilise un AsyncTask pour charger le contenu de mon AlertDialog.
Ma question est: comment je peux créer un AlertDialog qui montre: "Chargement ..." et montre alors le contenu dans ma méthode onPostExecute?Android DialogFragment

public class MyDialog extends DialogFragment { 

    public MyDialog(){ 
     super(); 
    } 

    @Override 
    public Dialog onCreateDialog(final Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     .... 

     return builder.create(); 
    } 

    public class myTask extends Asynctask<Void, Void, Void> { 

     @Override 
     protected Void onPreExecute(){ 
      Show loading... in AlertDialog 
     } 

     @Override 
     protected Void doInBackground(Void... voids) { 
      Load content... 
     } 

     @Override 
     protected Void onPostExecute(){ 
      Show content in AlertDialog 
     } 
    } 

Répondre

2

À cet effet, ma suggestion est de ne pas utiliser AlertDialog. Utilisez une boîte de dialogue de progression, voici votre boîte de dialogue complet,

public class MyDialog extends DialogFragment { 

    public MyDialog(){ 
     super(); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.your_dialog_id, container, false); 
     new myTask().execute(); 
     return view;  
    } 

    private void afterContentLoad (Object content) 
    { 
     //Update your UI with respect of your content :) 
    } 

    public class myTask extends Asynctask<Void, Void, Void> { 
     private ProgressDialog mDialog; 
     @Override 
     protected Void onPreExecute(){ 
      try{ 
       mDialog = ProgressDialog.show(getActivity(), "", "Loading...!"); 
      } 
      catch(Exception e) 
      { 
       //BadTokenException 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     protected Void doInBackground(Void... voids) { 
      Load content... 
     } 

     @Override 
     protected Void onPostExecute(){ 
      if (mDialog != null && mDialog.isShowing()){ 
       mDialog.dismiss(); 
      } 
      //Put your code after content loaded 
      afterContentLoad(Object); 
     } 
    } 

}

+0

Vous n'avez pas besoin de la méthode OnCreateDialog? –

+0

Non ....! Ce n'est pas nécessaire ... :) –

+0

Merci! Mais je voudrais mettre mon contenu après est chargé dans une boîte de dialogue, Puis-je mettre mon contenu à ProgressDialog? –