Qual è il modo migliore per mostrare uno spinner di caricamento mentre l'app è in attesa di una risposta dal server?
Questo può essere fatto a livello di codice? In modo che non devo aggiungere lo spinner di caricamento nel file XML?
Qual è il modo migliore per mostrare uno spinner di caricamento mentre l'app è in attesa di una risposta dal server?
Questo può essere fatto a livello di codice? In modo che non devo aggiungere lo spinner di caricamento nel file XML?
Risposte:
ProgressDialog è obsoleto da Android Oreo. Utilizzare invece ProgressBar
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...");
A proposito, Spinner ha un significato diverso in Android. (È come il menu a discesa Seleziona in HTML)
progress.setCancelable(false);
.
ProgressDialog
è stato deprecato in Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog è diventato obsoleto dal livello API 26 https://developer.android.com/reference/android/app/ProgressDialog.html
Includo un ProgressBar nel mio layout
<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" />
e cambia la sua visibilità in .GONE | .VISIBILE a seconda del caso d'uso.
progressBar_cyclic.visibility = View.VISIBLE
Uso ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Tuttavia, questo è considerato come un modello anti oggi (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
è stato deprecato in Android O developer.android.com/reference/android/app/ProgressDialog.html
In realtà, se stai aspettando una risposta da un server, dovrebbe essere fatto programmaticamente. È possibile creare una finestra di dialogo di avanzamento e chiuderla, ma non è "la via Android".
Attualmente il metodo raccomandato è usare 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;
}
}
Quindi, nella tua attività, imposti il gestore dei frammenti e mostri la finestra di dialogo una volta avviata l'attesa del server:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Una volta che il tuo server avrà risposto completo, lo eliminerai:
myInstance.dismiss()
Ricorda che progressdialog è uno spinner o una barra di avanzamento a seconda degli attributi, leggi di più sulla guida api
ProgressDialog
è stato deprecato in Android O developer.android.com/reference/android/app/ProgressDialog.html
È stato così che ho potuto aprire una sola finestra di dialogo alla volta. Basato sulla risposta di 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();
}
}
Ho anche dovuto usare
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
è stato deprecato in Android O developer.android.com/reference/android/app/ProgressDialog.html