You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Intent返回后禁用按钮X秒的Android实现问题

解决Intent返回后禁用按钮X秒的问题

你的代码核心问题是:postDelayed在启动Intent后立刻执行,不管用户是否从CmxScanner页面返回,10秒后按钮就会被重新启用,完全不符合“返回后再禁用X秒”的逻辑。

以下是两种正确的实现方式:

方法一:使用registerForActivityResult(推荐,适配Android 11+)

这是Android官方推荐的新API,替代已弃用的startActivityForResult:

private ActivityResultLauncher<Intent> scannerLauncher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_menu_layout);

    // 初始化页面返回监听
    scannerLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                // 从扫描页面返回后执行
                Guarding.setEnabled(false);
                // X秒后重新启用按钮,这里设为10秒(10000毫秒)
                Guarding.postDelayed(() -> Guarding.setEnabled(true), 10000);
            });

    Guarding.setOnClickListener(v -> {
        SharedPref.write(SharedPref.SCANTYPE, "GUARDING");
        Intent intent = new Intent(Menu.this, CmxScanner.class);
        scannerLauncher.launch(intent);
    });
}

方法二:使用startActivityForResult(兼容旧版本)

如果项目需要适配Android 10及以下,可使用此方法:

private static final int SCANNER_REQUEST_CODE = 1001;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_menu_layout);

    Guarding.setOnClickListener(v -> {
        SharedPref.write(SharedPref.SCANTYPE, "GUARDING");
        Intent intent = new Intent(Menu.this, CmxScanner.class);
        startActivityForResult(intent, SCANNER_REQUEST_CODE);
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SCANNER_REQUEST_CODE) {
        // 返回后禁用按钮
        Guarding.setEnabled(false);
        // X秒后恢复启用
        Guarding.postDelayed(() -> Guarding.setEnabled(true), 10000);
    }
}

注意事项

  • 确保Guarding按钮初始状态为启用(布局中默认就是启用,无需额外设置)。
  • postDelayed的时间单位是毫秒,可根据需求替换10000为你需要的X秒对应的数值。
  • 若需处理扫描页面返回的结果,可在回调中添加resultCode或data的判断逻辑。

内容的提问来源于stack exchange,提问作者Terence Bruwer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:40:49