web-dev-qa-db-ja.com

ロード/進行状況インジケーターを表示する最良の方法は?

アプリがサーバーからの応答を待っている間に、ロードスピナーを表示する最良の方法は何ですか?

これはプログラムで実行できますか?そのため、XMLファイルにロードスピナーを追加する必要はありませんか?

135
Jochem Gruter

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では異なる意味を持ちます。 (HTMLの選択ドロップダウンのようなものです)

283
Suraj Bajaj

ProgressDialog を使用します

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

enter image description here

ただし、これは今日(2013)のアンチパターンと見なされます。 http://www.youtube.com/watch?v=pEGWcMTxs3I

16
vasart

APIレベル26以降、ProgressDialogは非推奨になりました 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
10
Ilker Baltaci

実際、サーバーからの応答を待っている場合は、プログラムでshould行う必要があります。進行状況ダイアログを作成して閉じることもできますが、それでも「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;
    }
}

次に、アクティビティでフラグメントマネージャを設定し、サーバーの待機が開始されたらダイアログをshowに設定します。

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

サーバーが応答を完了したら、それを却下します。

myInstance.dismiss()

Progressdialogは属性に応じてスピナーまたはプログレスバーであることに注意してください。詳細は api guide

9
quinestor

これは、一度に1つの進行ダイアログのみを開くことができるようにするための方法です。 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();
}
4
Isaac Zais