android - programacion - ¿La mejor manera de mostrar un indicador de carga/progreso?
manual de programacion android pdf (5)
Así es como hice esto para que solo se pueda abrir un 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();
}
¿Cuál es la mejor manera de mostrar un spinner de carga mientras la aplicación espera una respuesta del servidor?
¿Se puede hacer esto programáticamente? ¿Para que no tenga que agregar el spinner de carga en el archivo xml?
En realidad, si está esperando la respuesta de un servidor, debe hacerlo programáticamente. Puede crear un cuadro de diálogo de progreso y descartarlo, pero de nuevo eso no es "el camino 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 diálogo una vez que se haya iniciado la espera del 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 progresodialog es un spinner o una barra de progreso dependiendo de los atributos, lea más en la guía api
ProgressDialog se ha quedado obsoleto desde API Nivel 26 developer.android.com/reference/android/app/ProgressDialog.html
Incluyo una ProgressBar 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
Use ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Sin embargo, esto se considera un patrón anti hoy (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
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)