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
- No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () dentro de AsyncTask para ProgressDialog
- ¿Cómo utilizar AsyncTask para mostrar un ProgressDialog mientras realiza un trabajo de fondo en Android?
- AsyncTask onPostExecute no se ejecuta en el hilo principal?
- Vista del temporizador android (al igual que la barra de progreso) actualizando con colores en Lienzo
- Ancho horizontal de la barra de progreso en la barra de acciones
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?
- Android: Cómo ocultar el progreso de Seekbar?
- ¿Cómo puedo hacer que un ProgressDialog sea cancelable por el botón de retroceso pero no por un toque de pantalla?
- Quiero un círculo de progreso en lugar de un diálogo de progreso
- No se puede tomar el progreso en la carga de archivos POST HTTP (Android)
- Mostrar ProgressDialog mientras carga el diseño con setContentView
- Progreso de la ventana de presentación pero no Progreso de ActionBar (utilizando la biblioteca v7 compat)
- Android Descargar Progress
- El diálogo de progreso de Android no se muestra en AsyncTask
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
.
- Animación del tamaño de texto de TextView
- ¿Cómo determinar mediante programación el diseño XML de mis aplicaciones de Android?