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

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

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

Ответ 1

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)

Ответ 3

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

В настоящее время рекомендуется использовать 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 - это счетчик или индикатор прогресса в зависимости от атрибутов, больше читайте в api guide

Ответ 4

Так я сделал это, чтобы только один диалог прогресса мог быть открыт одновременно. Исходя из ответа от 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();
    }
}

Мне также пришлось использовать

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}