¿Cuál es la mejor manera de mostrar un control de carga mientras la aplicación espera una respuesta del servidor?
¿Se puede hacer esto mediante programación? ¿Para que no tenga que agregar el control de carga en el archivo xml?
¿Cuál es la mejor manera de mostrar un control de carga mientras la aplicación espera una respuesta del servidor?
¿Se puede hacer esto mediante programación? ¿Para que no tenga que agregar el control de carga en el archivo xml?
Respuestas:
ProgressDialog está en desuso de Android Oreo. Use ProgressBar en su lugar
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();
O
ProgressDialog.show(this, "Loading", "Wait while loading...");
Por cierto, Spinner tiene un significado diferente en Android. (Es como el menú desplegable de selección en HTML)
progress.setCancelable(false);
.
ProgressDialog
fue desaprobado en Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog ha quedado en desuso desde el nivel API 26 https://developer.android.com/reference/android/app/ProgressDialog.html
Incluyo una barra de progreso en mi diseño
<ProgressBar
android:layout_weight="1"
android:id="@+id/progressBar_cyclic"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="40dp"
android:minWidth="40dp" />
y cambie su visibilidad a .GONE | .VISIBLE según el caso de uso.
progressBar_cyclic.visibility = View.VISIBLE
Utilizar ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Sin embargo, esto se considera como un anti patrón hoy (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
fue desaprobado en Android O developer.android.com/reference/android/app/ProgressDialog.html
En realidad, si está esperando la respuesta de un servidor, debe hacerse mediante programación. Puede crear un cuadro de diálogo de progreso y descartarlo, pero, de nuevo, esa no es "la forma de Android".
Actualmente el método recomendado es usar un DialogFragment :
public class MySpinnerDialog extends DialogFragment {
public MySpinnerDialog() {
// use empty constructors. If something is needed use onCreate's
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
_dialog = new ProgressDialog(getActivity());
this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
_dialog.setMessage("Spinning.."); // set your messages if not inflated from XML
_dialog.setCancelable(false);
return _dialog;
}
}
Luego, en su actividad, configure su administrador de fragmentos y muestre el cuadro de diálogo una vez que se inició la espera para el servidor:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Una vez que su servidor haya respondido completo, lo descartará:
myInstance.dismiss()
Recuerde que el diálogo de progreso es un control giratorio o una barra de progreso según los atributos, lea más en la guía de la API
ProgressDialog
fue desaprobado en Android O developer.android.com/reference/android/app/ProgressDialog.html
Así es como lo hice para que solo se pueda abrir un cuadro de diálogo de progreso a la vez. Basado en la respuesta de Suraj Bajaj
private ProgressDialog progress;
public void showLoadingDialog() {
if (progress == null) {
progress = new ProgressDialog(this);
progress.setTitle(getString(R.string.loading_title));
progress.setMessage(getString(R.string.loading_message));
}
progress.show();
}
public void dismissLoadingDialog() {
if (progress != null && progress.isShowing()) {
progress.dismiss();
}
}
También tuve que usar
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
fue desaprobado en Android O developer.android.com/reference/android/app/ProgressDialog.html