为什么Android progressdialog中没有取消按钮?

时间:2009-07-14 07:32:08

标签: java android user-interface

当我意识到在Android的进度对话框或微调器中没有取消按钮时,我正面临一个类似于this person(从2008年1月开始)经历的一个令人头疼的时刻。现在是2009年7月,我刚安装了Android的蛋糕版。这件事改变了吗?如果没有,你是否在对话框中添加了取消按钮,你是如何做到的?

5 个答案:

答案 0 :(得分:16)

不确定整个取消按钮...我听说过onCancel()方法没有正确触发的报告。我的解决方案只是在对话框上创建一个普通按钮,并在按下按钮时调用返回。

private void createCancelProgressDialog(String title, String message, String buttonText)
{
    cancelDialog = new ProgressDialog(this);
    cancelDialog.setTitle(title);
    cancelDialog.setMessage(message);
    cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
    {
        public void onClick(DialogInterface dialog, int which) 
        {
            // Use either finish() or return() to either close the activity or just the dialog
            return;
        }
    });
    cancelDialog.show();
}

然后只需使用活动中其他地方的简单调用方法

createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel");

相当简单的解决方案,但它可以解决问题;) 还要注意,cancelDialog是一个活动擦除变量,如果您不需要从其他地方调用它,那么您应该能够将变量的范围限制为该方法。

答案 1 :(得分:11)

我不是Android用户或开发者,但我认为链接到线程中给出的答案非常不错:所有Android设备上都有硬件“后退”键。用户应该知道按回来退出他们当前所处的任何活动。

因此,UI设计者认为不必包含GUI后退/取消按钮。这可以被视为DRY原则的UI应用程序;如果已经有一种做某事的方法,那就足够了。

答案 2 :(得分:2)

硬件密钥就是这里的答案。我要小心将DRY原则推广到UI。在很多情况下,您需要通过标题,正文,颜色和图像反复锤击,敲击,敲击相同的点。

用户不会像阅读小说那样“阅读”UI。他们扫描阅读。

答案 3 :(得分:1)

我不能代替其他应用程序,但在我的任何可能导致UI线程等待的事情都是在一个单独的线程中执行的。我要做的最多就是在标题栏中显示一个小的进度微调器,让用户知道后台正在发生的事情。

答案 4 :(得分:0)

作为一名Android用户和开发人员,我认为,基于我对该平台的理解,我可以说,在无取消进度对话框中默认没有取消按钮是有充分理由的。

作为开发人员,默认情况下无法取消这些对话框,也就是说,您必须明确地将它们设置为可取消。

这是有道理的,因为它们的目的是在用户继续使用应用程序之前,通过UI线程向用户警告某些工作正在其他地方进行,这对于更新UI线程很重要。

例如,当获取数据列表以占据空屏幕时,没有任何东西可以与之交互,并且需要让用户知道某些事情正在发生,并期望没有任何可用的东西可以与之交互直到此过程完成。

然而,可能存在一些情况,例如从互联网上检索数据,过程是“粗略的”,并且由于连接问题,您可能无法完成请求,并被困在这里。

这是一个开发,您可以将对话框取消。

现在作为一个明确了解Android范式的用户,我知道如果我想回到之前的状态,或者“取消”当前的操作,我应该按后退键。 / p>

作为一个用户,知道在Android中,菜单键通常可以显示隐藏的选项,有时候在看似空白的屏幕上无法进行交互,这没有什么不同。

这是用户期望的行为以及平台的设计方式。你可以很好地添加一个取消按钮,但从用户的角度来理解他们的手机,这没有区别,后面的键显然是用于此目的的预期选择。

活动和用户界面有一个流程,你流经活动和UI“屏幕”,它们是“堆叠”的,而后退按钮实际上是“弹出”堆栈中的最后一个东西,让你回到原来的位置。如果您将对话框视为这些活动中的另一个,则需要从堆栈顶部将其弹出以返回到底层或之前的活动。

如果一个开发人员有一个无法被后面取消的对话框,那么它可能是设计上的,在某些情况下,它可能是非常好的理由,或者,它是糟糕的开发和对devloper的疏忽一部分。