web-dev-qa-db-ja.com

Android DialogFragmentプログレスバー

私はあらゆる場所を検索しましたが、この問題の解決策を見つけることができません。

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

私はDialogFragmentをAndroid互換性パッケージと一緒に使用して進行状況バーを作成しています(ドキュメントが見つかりません) basic\alertダイアログのみ =)showDialog()は現在廃止されているため、現在、カスタムメッセージボックスをログインスピナーとして表示しています。

要約すれば:

  • DialogFragmentを使用してプログレススピナーを設定するにはどうすればよいですか。
  • 向きを変更した後、別のスレッドで閉じるにはどうすればよいですか。
32
Jon

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

Android開発のヒントによると:

"ProgressDialogの使用をやめる、インラインインジケーターはあなたの友達です"

Roman Nurikとして states

enter image description here

これは簡単です。 ProgressDialogおよびその他のモーダル読み込みインジケーターの使用を停止します。特に次のような場合は、非常に邪魔になり、煩わしくなります。

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

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

  • 「お待ちください」とのこと。いいえ、アンインストールします。

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

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

20
LOG_TAG

プログレススピナーを表示するには、次のようにダイアログフラグメントで 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を(次のFragmentActivityまたはFragmentから)取得し、 を呼び出す必要があります。 popBackStack() (その間に他のフラグメントトランザクションを実行しない場合)。

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

60