Каков наилучший способ показать загрузчик, пока приложение ожидает ответа с сервера?
Можно ли это сделать программно? Так что мне не нужно добавлять загрузчик нагрузки в XML файл?
Каков наилучший способ показать загрузчик, пока приложение ожидает ответа с сервера?
Можно ли это сделать программно? Так что мне не нужно добавлять загрузчик нагрузки в XML файл?
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)
Используйте ProgressDialog
ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Однако сегодня это считается анти-шаблоном (2013): http://www.youtube.com/watch?v=pEGWcMTxs3I
На самом деле, если вы ожидаете ответа с сервера, он должен выполняться программно. Вы можете создать диалог прогресса и отбросить его, но опять же это не "путь андроида".
В настоящее время рекомендуется использовать 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
Так я сделал это, чтобы только один диалог прогресса мог быть открыт одновременно. Исходя из ответа от 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();
}