Jaki jest najlepszy sposób na wyświetlenie wskaźnika ładowania, gdy aplikacja oczekuje na odpowiedź z serwera?
Czy można to zrobić programowo? Żebym nie musiał dodawać pokrętła ładowania w pliku xml?
Jaki jest najlepszy sposób na wyświetlenie wskaźnika ładowania, gdy aplikacja oczekuje na odpowiedź z serwera?
Czy można to zrobić programowo? Żebym nie musiał dodawać pokrętła ładowania w pliku xml?
Odpowiedzi:
ProgressDialog został wycofany z systemu Android Oreo. Zamiast tego użyj 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();
LUB
ProgressDialog.show(this, "Loading", "Wait while loading...");
Nawiasem mówiąc, Spinner ma inne znaczenie w Androidzie. (To jest jak menu wyboru w HTML)
progress.setCancelable(false);
.
ProgressDialog
został wycofany w systemie Android O developer.android.com/reference/android/app/ProgressDialog.html
ProgressDialog został wycofany od 26 poziomu API https://developer.android.com/reference/android/app/ProgressDialog.html
Dołączam ProgressBar do mojego układu
<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" />
i zmień jego widoczność na .GONE | WIDOCZNE w zależności od przypadku użycia.
progressBar_cyclic.visibility = View.VISIBLE
Posługiwać się ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Jednak dzisiaj (2013) jest to uważane za anty-wzorzec: http://www.youtube.com/watch?v=pEGWcMTxs3I
ProgressDialog
został wycofany w systemie Android O developer.android.com/reference/android/app/ProgressDialog.html
Właściwie, jeśli czekasz na odpowiedź z serwera, powinno to być zrobione programowo. Możesz utworzyć okno dialogowe postępu i zamknąć je, ale z drugiej strony nie jest to „sposób androida”.
Obecnie zalecaną metodą jest użycie 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;
}
}
Następnie w swojej aktywności ustawiasz menedżera fragmentów i wyświetlasz okno dialogowe po rozpoczęciu oczekiwania na serwer:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Gdy Twój serwer odpowie jako ukończony, odrzucisz go:
myInstance.dismiss()
Pamiętaj, że okno dialogowe postępu to pokrętło lub pasek postępu w zależności od atrybutów, więcej informacji znajdziesz w przewodniku po interfejsach API
ProgressDialog
został wycofany w systemie Android O developer.android.com/reference/android/app/ProgressDialog.html
W ten sposób zrobiłem to, aby w danym momencie było otwarte tylko jedno okno dialogowe postępu. Na podstawie odpowiedzi Suraja Bajaja
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();
}
}
Musiałem też użyć
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
został wycofany w systemie Android O developer.android.com/reference/android/app/ProgressDialog.html