Який найкращий спосіб відобразити спінер завантаження, поки програма чекає відповіді від сервера?
Чи можна це зробити програмно? Так що мені не потрібно додавати спінер завантаження у файл XML?
Який найкращий спосіб відобразити спінер завантаження, поки програма чекає відповіді від сервера?
Чи можна це зробити програмно? Так що мені не потрібно додавати спінер завантаження у файл XML?
Відповіді:
ПрогресDialog застарілий від Android Oreo. Замість цього використовуйте 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();
АБО
ProgressDialog.show(this, "Loading", "Wait while loading...");
До речі, Spinner має інше значення в Android. (Це як випадаюче меню в HTML)
progress.setCancelable(false);
.
ProgressDialog
застаріло в Android O developer.android.com/reference/android/app/ProgressDialog.html
ПрогресDialog застарів після API рівня 26 https://developer.android.com/reference/android/app/ProgressDialog.html
Я включаю ProgressBar у свій макет
<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" />
і змінити його видимість на .GONE | . ВІДМОВА залежно від випадку використання.
progressBar_cyclic.visibility = View.VISIBLE
Використовуйте ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Однак це сьогодні розглядається як анти-модель ( http://www.youtube.com/watch?v=pEGWcMTxs3I)
ProgressDialog
застаріло в Android O developer.android.com/reference/android/app/ProgressDialog.html
Насправді, якщо ви чекаєте відповіді від сервера, це слід робити програмно. Ви можете створити діалог прогресу та відхилити його, але знову ж таки це не "андроїдний шлях".
Наразі рекомендованим методом є використання діалогового фрагмента :
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;
}
}
Потім у своїй діяльності ви встановлюєте диспетчера фрагментів і показуєте діалогове вікно, як тільки очікування запуску сервера:
FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Після того, як ваш сервер відповів повним, ви відхилите його:
myInstance.dismiss()
Пам’ятайте, що діалог progress - це спінер або панель прогресу залежно від атрибутів, читайте докладніше у посібнику з api
ProgressDialog
застаріло в Android O developer.android.com/reference/android/app/ProgressDialog.html
Ось як я це зробив, щоб одночасно можна було відкрити лише один діалог прогресу. Виходячи з відповіді Суража Баджая
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();
}
}
Мені також довелося користуватися
protected void onResume() {
dismissLoadingDialog();
super.onResume();
}
ProgressDialog
застаріло в Android O developer.android.com/reference/android/app/ProgressDialog.html