Лучший способ показать индикатор загрузки / прогресса?



каков наилучший способ показать загрузочный счетчик, пока приложение ждет ответа от сервера?



можно ли это сделать программно? Так что мне не нужно добавлять счетчик загрузки в xml-файл?

440   5  

5 ответов:

ProgressDialog устарел от 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. (Это похоже на выпадающий список select в HTML)

использовать ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);

enter image description here

однако это рассматривается как анти шаблон сегодня (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I

на самом деле, если вы ждете ответ от сервера должны быть сделано программно. Вы можете создать диалог прогресса и отклонить его, но опять же это не "путь android".

В настоящее время рекомендуется использовать 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;
    }
}

затем в своей деятельности вы устанавливаете свой менеджер фрагментов и показать после того, как диалоговое окно подождите, пока сервер начал:

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");

после того, как ваш сервер ответил полный вы его уволите:

myInstance.dismiss()

помните, что progressdialog-это счетчик или progressbar в зависимости от атрибутов, Подробнее читайте на api guide

ProgressDialog стал устаревшим с уровня 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" />

и изменить его видимость .ПРОПАЩИЙ. | Видимый в зависимости от варианта использования.

    progressBar_cyclic.visibility = View.VISIBLE

вот как я это сделал, так что только один диалог прогресса может быть открыт одновременно. На основе ответа от Сураж Баджадж

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();
}

Comments

    Ничего не найдено.