33

我到处搜索,但找不到解决此问题的方法。

基本上我有一个登录屏幕,我试图在登录服务器(通过线程)时显示一个进度微调器,然后在登录成功后将其关闭。它必须在改变方向时起作用。

我正在使用DialogFragmentAndroid 兼容性包来制作进度条(在上面找不到任何文档,仅适用于 basic\alert dialog),因为showDialog()现在已弃用。现在我只显示一个自定义消息框作为登录微调器。

总之:

  • 如何使用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(从您的 next FragmentActivityor内部Fragment)并调用popBackStack()它(如果您同时不进行任何其他片段事务)。

如果您的进度对话框片段和下一个活动之间有更多的步骤/片段事务,您可能需要popBackStack(...)使用 ID 或标签的其他方法之一将所有内容从堆栈中弹出到您的进度对话框片段。

于 2011-09-09T16:17:22.463 回答
21

我知道这是个老问题,但我想为此分享更好的解决方案

根据Android Development Protip:

“停止使用 ProgressDialog,内联指标是你的朋友”

正如 Roman Nurik所说

在此处输入图像描述

这个很快。停止使用 ProgressDialog 和其他模式加载指示器。它们非常干扰和烦人,尤其是在以下情况下:

  • 每次切换标签时都会看到一个。

  • 你不能退出他们。

  • 他们说“请稍等”。不,谢谢,我宁愿卸载。

要么显示与您的内容内联的加载指示器(例如 http://developer.android.com/training/animation/crossfade.html),或者更好的是,在后台加载少量数据,这样您就可以最大限度地减少显示加载指示器。

更多关于设计指南中的进展和活动。

于 2013-10-19T04:45:19.920 回答