如何禁用Android中菜单选项的多次点击

发布于 2024-11-04 16:59:46 字数 33 浏览 1 评论 0原文

在处理第一次单击之前,如何禁用对菜单选项的多次单击?

How do you disable multiple clicks on a menu option, before the first click is processed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟酉 2024-11-11 16:59:47

您可以通过代码设置可见性或启用/禁用该项目。

MenuItem item = menu.findItem(R.id.your_item);
item.setVisible(true);
item.setEnabled(false);

当然,您必须在某处检查是否启用或禁用该图标。

You can set the visibility or enable/disable the item by code.

MenuItem item = menu.findItem(R.id.your_item);
item.setVisible(true);
item.setEnabled(false);

Of course you have to check somewhere whether to enable oder disable the icon.

柏拉图鍀咏恒 2024-11-11 16:59:47

Psuedo/Android 答案:

 private boolean clicked = false;

 @Override
 public onClick(View v){
   if(!clicked){
       clicked = true;


       // do your processing - one click only


       super.onClick();
   }
 }

编辑

,或者在第一次点击后更好,您可以调用 yourView.setOnClickListener(null); 来删除 onClick

Psuedo/Android answer:

 private boolean clicked = false;

 @Override
 public onClick(View v){
   if(!clicked){
       clicked = true;


       // do your processing - one click only


       super.onClick();
   }
 }

EDIT

or even better after the first click you can call yourView.setOnClickListener(null); to remove the onClick

欲拥i 2024-11-11 16:59:47

我知道这是一个老问题,但我想分享一种反应性方法。

片段/活动
onOptionsItemSelected:

    if (item.getItemId() == yourId) {
      viewModel.showTopUp()
      return true;
    }
    return super.onOptionsItemSelected(item);

在 ViewModel 中创建一个 PublishSubject 并限制请求以防止多次点击:

private PublishSubject<Context> topUpClicks = PublishSubject.create();

public void showTopUp(Context context) {
    topUpClicks.onNext(context);
}

private void handleTopUpClicks() {
    disposables.add(topUpClicks.throttleFirst(1, TimeUnit.SECONDS)
        .doOnNext(transactionViewNavigator::openTopUp)
        .subscribe());
}

I know that this is an old question but I want to share a reactive approach.

Fragment/Activity
onOptionsItemSelected:

    if (item.getItemId() == yourId) {
      viewModel.showTopUp()
      return true;
    }
    return super.onOptionsItemSelected(item);

In the ViewModel create a PublishSubject and throttle the requests to prevent multiple clicks:

private PublishSubject<Context> topUpClicks = PublishSubject.create();

public void showTopUp(Context context) {
    topUpClicks.onNext(context);
}

private void handleTopUpClicks() {
    disposables.add(topUpClicks.throttleFirst(1, TimeUnit.SECONDS)
        .doOnNext(transactionViewNavigator::openTopUp)
        .subscribe());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文