164

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

これはプログラムで行うことができますか? xml ファイルにロード スピナーを追加する必要がないようにするには?

4

5 に答える 5

305

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 の選択ドロップダウンのようなものです)

于 2012-10-11T14:50:49.313 に答える
16

使用するProgressDialog

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

ここに画像の説明を入力

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

于 2012-10-11T14:31:46.247 に答える
10

実際、サーバーからの応答を待っている場合は、プログラムで実行する必要があります。進行状況ダイアログを作成して閉じることもできますが、それは「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は、属性に応じてスピナーまたはプログレスバーになることを忘れないでください。詳細については、APIガイドをご覧ください。

于 2012-10-11T14:56:51.487 に答える
6

これは、一度に 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();
}
于 2014-01-16T14:40:06.627 に答える