33

私はどこでも検索しましたが、この問題の解決策を見つけることができません。

基本的に私はログイン画面を持っていて、サーバーへのログイン中に(スレッドを介して)進行状況スピナーを表示させ、ログインが成功した後にそれを閉じようとしています。向きを変えながら動作する必要があります。

現在非推奨になっているため、Android互換パッケージを使用DialogFragmentしてプログレスバーを作成しています(ドキュメントが見つかりません。basic \ alertダイアログの場合のみshowDialog()。今は、ログインスピナーとしてカスタムメッセージボックスを表示しています。

要約すれば:

  • でProgressスピナーを設定するにはどうすればよいですかDialogFragment
  • 向きを変えた後、別のスレッドでそれを閉じるにはどうすればよいですか。
4

2 に答える 2

60

進行状況スピナーを表示するには、ダイアログフラグメントでDialogFragment.onCreateDialog()onCreateView()を次のようにオーバーライドします(オーバーライドする必要はありません)。

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
    final ProgressDialog dialog = new ProgressDialog(getActivity());
    //
    dialog.setTitle(R.string.login_title);
    dialog.setMessage(getString(R.string.login_message));
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);
    // etc...
    return dialog;
}

そのダイアログフラグメントを他の場所から却下する場合は、 (次のまたはFragmentManagerの内部から)を取得して呼び出す必要があります(その間に他のフラグメントトランザクションを実行しない場合)。FragmentActivityFragmentpopBackStack()

進行状況ダイアログフラグメントと次のアクティビティの間にさらにステップ/フラグメントトランザクションがある場合はpopBackStack(...)、IDまたはタグを取得して、進行状況ダイアログフラグメントまですべてをスタックからポップアップする他のメソッドの1つが必要になる可能性があります。

于 2011-09-09T16:17:22.463 に答える
21

私はこれが古い質問であることを知っていますが、これに対するはるかに良い解決策を共有したいと思います

Android Development Protipによると:

「ProgressDialogの使用をやめてください。インラインインジケーターはあなたの友達です」

ローマヌリックが述べているように

ここに画像の説明を入力してください

これは速いです。ProgressDialogおよびその他のモーダルローディングインジケーターの使用を停止します。特に次の場合、非常に邪魔になり、煩わしくなります。

  • タブを切り替えるたびに表示されます。

  • それらから戻ることはできません。

  • 彼らは「待ってください」と言います。いいえ、アンインストールしたいだけです。

コンテンツに合わせて読み込みインジケーターを表示するか(例: http: //developer.android.com/training/animation/crossfade.html)、バックグラウンドで少量のデータを読み込んで、表示する必要性を最小限に抑えます。ローディングインジケーター。

設計ガイドラインの進捗状況とアクティビティの詳細。

于 2013-10-19T04:45:19.920 に答える