2011-09-04 133 views
32

我到处搜索过,找不到解决方案。Android DialogFragment进度条

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

我正在使用DialogFragment与Android兼容性程序包来创建进度条(无法找到任何文档,only for basic\alert dialog),因为showDialog()现在已被弃用。现在我只是将自定义消息框显示为登录微调器。

总结:

  • 我怎样才能建立一个进步微调与DialogFragment
  • 如何在方向更改后在另一个线程中将其解除。

回答

21

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

根据Android的开发普罗蒂普:

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

由于罗马Nurik states

enter image description here

这个很快。停止使用ProgressDialog和其他模式加载 指标。他们是非常干扰性和恼人的,尤其是当 :

  • 你一个每次看到你切换标签。

  • 你不能退出它们。

  • 他们说“请稍等。”不,谢谢,我宁愿只是卸载。内联与您的内容

要么显示负载指示器(例如 http://developer.android.com/training/animation/crossfade.html)或更好,但加载少量的数据在 背景,使你最大限度地减少需要甚至显示加载 指标。

更多关于进度&活动在design guidelines

+1

谨慎的是,当你复制另一个单词时,你必须正确地阻止你从它们复制的任何东西,并且你必须提供一个链接到原始来源。 –

+0

确实如此,但是如果您说某事已经成功打印,您无法继续使用该应用,那么情况如何呢?因为只有在打印成功时才可以更新和保存数据,如果不成功,则需要让用户再次尝试/更改数据等。我必须找到一种方法来处理所有这些,而不显示等待微调。 – AgentKnopf

+0

@Zainodis隐藏/隐藏内联进度条并使用Crouton显示错误消息,您可以将打印按钮名称更改为重新打印。全部取决于你在哪里调用ShowProgress(true)ShowProgress(false)来显示内容。 –

59

对于显示进度微调,只是重写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; 
} 

至于解聘从别的地方该对话框片段,你需要(从您的下一个FragmentActivityFragment中获得),并在其上调用popBackStack()(如果您在此期间没有执行任何其他片段事务)。

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

+1

你有两次的setTitle,觉得你的意思,dialog.setMessage(R.string.login_message) – worked

+0

@worked谢谢,我固定它 - 没有'setMessage(INT)''上ProgressDialog',虽然如此,我不得不使用'setMessage(String)'。 –

+17

我想补充一点,'DialogFragment'有一个'dismiss'方法,可以用来支持弹出后退堆栈。只是'findFragmentByTag',转换成'DialogFragment'和'dismiss()' – Greyson