Was ist der beste Weg, um einen Ladespinner anzuzeigen, während die App auf eine Antwort vom Server wartet?
Kann dies programmgesteuert erfolgen? Damit ich den Load Spinner nicht in die XML-Datei einfügen muss?
Was ist der beste Weg, um einen Ladespinner anzuzeigen, während die App auf eine Antwort vom Server wartet?
Kann dies programmgesteuert erfolgen? Damit ich den Load Spinner nicht in die XML-Datei einfügen muss?
Antworten:
ProgressDialog ist von Android Oreo veraltet. Verwenden Sie stattdessen 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();
ODER
ProgressDialog.show(this, "Loading", "Wait while loading...");
Übrigens hat Spinner in Android eine andere Bedeutung. (Es ist wie die Auswahl Dropdown in HTML)
progress.setCancelable(false);
.
ProgressDialog
wurde in Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog ist seit API Level 26 https://developer.android.com/reference/android/app/ProgressDialog.html veraltet
Ich füge eine ProgressBar in mein Layout ein
<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" />
und ändern Sie die Sichtbarkeit in .GONE | .SICHTBAR je nach Anwendungsfall.
progressBar_cyclic.visibility = View.VISIBLE
Verwenden ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Dies wird jedoch heute (2013) als Anti-Muster angesehen: http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
wurde in Android O developer.android.com/reference/android/app/ProgressDialog.html
Wenn Sie auf eine Antwort von einem Server warten, sollte dies tatsächlich programmgesteuert erfolgen. Sie können einen Fortschrittsdialog erstellen und ihn schließen, aber das ist auch nicht "der Android-Weg".
Derzeit wird empfohlen, ein DialogFragment zu verwenden :
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;
}
}
Dann legen Sie in Ihrer Aktivität Ihren Fragment-Manager fest und zeigen den Dialog an, sobald das Warten auf den Server begonnen hat:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Sobald Ihr Server vollständig geantwortet hat, werden Sie ihn schließen:
myInstance.dismiss()
Denken Sie daran, dass der Fortschrittsdialog je nach Attribut ein Spinner oder ein Fortschrittsbalken ist. Weitere Informationen finden Sie in der API-Anleitung
ProgressDialog
wurde in Android O developer.android.com/reference/android/app/ProgressDialog.html
So habe ich das gemacht, damit immer nur ein Fortschrittsdialog geöffnet sein kann. Basierend auf der Antwort von 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();
}
}
Ich musste auch verwenden
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
wurde in Android O developer.android.com/reference/android/app/ProgressDialog.html