【问题标题】:Am I responsible for handling when a user clicks a button quickly/repeatedly? [closed]当用户快速/重复单击按钮时,我是否负责处理? [关闭]
【发布时间】:2012-12-07 16:14:57
【问题描述】:

作为一名 Android 开发者,我是否有责任处理用户快速重复按下按钮的情况?或者这是否被认为是用户滥用?从后端的数据角度来看,没有什么不好的事情发生。

我有一个按钮,当被选中时会进行服务器调用。一旦服务器响应,就会从返回的消息中生成一个活动(使用处理程序)。在某些情况下,如果用户反复按下按钮,重复的活动可能会开始堆叠,并可能导致糟糕的用户体验(即用户可能需要多次点击后退按钮才能返回上一屏幕)

编辑: 我遗漏了一些细节。现在在等待服务器响应时会显示一个 spinner 对话框。这会拦截所有点击。问题在于,在某些情况下,从关闭微调器到开始新活动之间的时间足够长,用户可以进行更多点击。

现在我正在禁用按钮,但似乎 有点 hack 可能有更好的解决方案。

【问题讨论】:

  • 这更适合ux.stackexchange.com
  • 您可以在特定时间内禁用按钮,从而不允许“用户滥用”。
  • 定义“用户滥用”?根据您自己的经验,您似乎已经意识到您有责任确保交互仅在相关时对用户可用。
  • 用更多细节更新了我的问题。

标签: android android-activity android-networking


【解决方案1】:

我是否负责处理用户快速重复按下按钮的情况?

通常是的。

或者这是否被视为用户滥用?

用户的意见才是最重要的,用户可能不会认为这是对您的应用的“滥用”。

一旦服务器响应,就会从返回的消息中生成一个活动(使用处理程序)。我

不要在这样的延迟后开始活动,特别是因为服务器可能永远不会响应。

在某些情况下,如果用户反复按下按钮,重复的活动可能会开始堆叠,并可能导致糟糕的用户体验(即用户可能需要多次点击后退按钮才能返回上一屏幕)

因此,换句话说,您的 UI 导致用户感到沮丧。解决方案是编写更好的 UI。

【讨论】:

  • 更新以澄清一些事情
  • @loeschg:“现在我正在禁用按钮,但它看起来有点像 hack”——嗯,网站/应用程序会这样做,所以不是 那个我> hacky。但是,在调用setEnabled(false) 和它生效之间还有一个时间窗口,因此您可能仍然会收到几个点击事件。
  • 同意禁用评论。也许“hack”这个词的选择很糟糕。调用 setEnabled(false) 的延迟是否真的足够重要,以至于会注册点击事件?我还没有看到这种情况。另外,您介意扩展“编写更好的 UI”评论吗?
  • @loeschg:“调用 setEnabled(false) 的延迟是否真的足够重要,以至于会注册点击事件?” - 是的。其他开发人员也遇到过。不过,在速度更快的设备上可能不太可能。
  • @loeschg:“另外,你介意扩展一下“写一个更好的用户界面”的评论吗?” - 根据您最初的问题,用户按下了一个按钮,在没有反馈的情况下遭受了不确定的延迟,然后通过跳转到一个新的活动来更改整个 UI。那将是疯狂的。您的更新稍微改进了这一点,假设您所说的“微调器”不是指Spinner,而是某种传统的进度指示器,例如ProgressBar
【解决方案2】:

当您开始执行需要很长时间的操作时,最好显示ProgressDialog,然后在任务完成后将其关闭。

private ProgressDialog mProgressDialog;

...

mProgressDialog = new ProgressDialog(context);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setMessage("Loading...");
mProgressDialog.show();

...

mProgressDialog.dismiss();

【讨论】:

  • 谢谢!我现在正在使用一个对话框来指示服务器进度。查看我的编辑。
【解决方案3】:

第一次按下后的简单解决方案btn.setEnabled(false)。需要时重新启用。

就你的问题而言:

作为一名 Android 开发者,我是否负责处理这种情况 用户在哪里快速重复地按下按钮?

我会说不,我相信用户足够聪明,可以意识到如果他们滥用应用程序,它可能无法按预期运行。虽然您显然可以使用自己的技术来缓解这个问题,但如果您愿意的话。

【讨论】:

  • 谢谢!我更新了我的问题,实际上我现在正在这样做。给了你一个 +1,但我希望找到一个“更清洁”的解决方案。
【解决方案4】:

取决于你的意图。您是否试图在整个运行过程中禁止单击它两次?或者你想禁止快速点击它。

在第一种情况下,只需在第一次单击后使用myButton.setEnabled(false); 禁用按钮即可。

如果您想在一段时间内禁用它,请在OnClick 上使用 if 和 else。将此与等待功能结合使用。

类似:

public void Sleeper() {
  myButton.setEnabled(false);
  wait(time);
  myButton.setEnabled(true):
}

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多