Mostrar diálogo de progreso dentro de DialogFragment

Me gustaría mostrar un diálogo de progreso dentro de un fragmento de diálogo.

Sin embargo, cuando estoy usando este código

ProgressDialog prog = new ProgressDialog(ctx); prog.setTitle(getString(R.string.pleaseWait)); prog.setMessage(getString(R.string.webpage_being_loaded)); prog.setCancelable(false); prog.setIndeterminate(true); prog.setProgressStyle(ProgressDialog.STYLE_SPINNER); prog.show(); 

El cuadro de diálogo de progreso se muestra en el fragmento que llamó el cuadro de diálogo, no en el propio DialogFragment.

¿Qué hice mal?

Aqui tienes.

 import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v4.app.DialogFragment; public class ProgressDialogFragment extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(false); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ProgressDialog dialog = new ProgressDialog(getActivity(), getTheme()); dialog.setTitle(getString(R.string.pleaseWait)); dialog.setMessage(getString(R.string.webpage_being_loaded)); dialog.setIndeterminate(true); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); return dialog; } } 

Aquí hay un fragmento de diálogo de carga simple que reproduce un gif como una animación dibujable

 public class LoadingDialogFragment extends DialogFragment { public static final String FRAGMENT_TAG = "LoadingFragment"; private ImageView ivLoading; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.dialog_loading, container, false); if (rootView != null) { ivLoading = (ImageView) rootView.findViewById(R.id.iv_loading); ivLoading.setBackgroundResource(R.drawable.anim_drawable); } return rootView; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; } @Override public void onStart() { super.onStart(); Dialog dialog = getDialog(); if (dialog != null) { dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); AnimationDrawable loadingAnimation = (AnimationDrawable) ivLoading.getBackground(); loadingAnimation.start(); } } } 

Y puedes mostrarlo y ocultarlo con:

  public void showLoadingDialog() { LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); if (fragment == null) { fragment = new LoadingDialogFragment(); fragment.setCancelable(false); getSupportFragmentManager().beginTransaction() .add(fragment, LoadingDialogFragment.FRAGMENT_TAG) .commitAllowingStateLoss(); // fragment.show(getSupportFragmentManager().beginTransaction(), LoadingDialogFragment.FRAGMENT_TAG); } } public void hideLoadingDialog() { LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); if (fragment != null) { // fragment.dismissAllowingStateLoss(); getSupportFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss(); } } 

Edit: Por cierto, no es una buena práctica mostrar un fragmento de diálogo para operaciones asíncronas como la creación de redes.

Prueba esto :

 ProgressDialog prog = (ProgressDialog)your_view.findViewById(R.id.yourprogress_id); prog.setTitle(getString(R.string.pleaseWait)); prog.setMessage(getString(R.string.webpage_being_loaded)); prog.setCancelable(false); prog.setIndeterminate(true); prog.setProgressStyle(ProgressDialog.STYLE_SPINNER); prog.show(); 

O

Si utiliza dinámicamente ProgressDialog;

 ProgressDialog prog= new ProgressDialog(getActivity());//Assuming that you are using fragments. prog.setTitle(getString(R.string.pleaseWait)); prog.setMessage(getString(R.string.webpage_being_loaded)); prog.setCancelable(false); prog.setIndeterminate(true); prog.setProgressStyle(ProgressDialog.STYLE_SPINNER); prog.show(); 

En Datos cargados,

 prog.dismiss(); 

Ahora , si la barra de progreso no se muestra dentro de su diálogo, tendrá que establecer un cuadro de diálogo personalizado y definir su barra de progreso dentro de ese cuadro de diálogo personalizado.

Utilice ProgressBar dentro de su fragmento de diálogo. Agregue la vista del progreso en su código del xml.

En su código:

 ProgressBar progressBar = view.findViewById(R.id.progress); progressBar .show(); 

cuando termine:

  progressBar.hide(); 

Sé que es un post muy antiguo, pero quiero decir una solución. Si no estoy equivocado, intenta mostrar el progress dialog antes del onStart lifecycle method . Mostrar progress dialog en el onResume method .

  • ¿Es posible mostrar la barra de progreso cuando se descarga a través de Retrofit 2 Asynchronous?
  • ¿Hay alguna forma de obtener el progreso de subida correctamente con HttpUrlConncetion?
  • Cambio del mensaje de diálogo de progreso durante la ejecución
  • AsyncTask o Handler- ¿Cuál es mejor para la interacción y el procesamiento de la red que consumen mucho tiempo?
  • Diálogo de progreso con asynctask
  • ProgressDialog rechaza después de girar la pantalla
  • AsyncTask con un ProgressDialog y barra de progreso
  • Mostrar ProgressDialog Android
  • Android ExoPlayer onProgressChanged
  • Cómo mostrar la barra de progreso antes de reproducir el video
  • Adición de un diálogo de progreso en una vista web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.