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

动态创建按钮触发startActivityForResult后,返回时如何禁用该按钮?

解决动态按钮点击跳转后返回禁用的问题

很简单,咱们只需要把点击的动态按钮实例存下来,等从目标Activity返回时直接操作它就行,具体步骤如下:

步骤1:定义成员变量保存点击的按钮

在你的主Activity类里,加一个成员变量来暂存点击的按钮:

private Button clickedDynamicBtn;
// 定义请求码,用来区分不同的跳转请求
private static final int REQUEST_CODE_VOTAR_EMOCION = 1;

步骤2:在onClick中保存按钮并启动Activity

在按钮的点击事件里,把当前点击的View转成Button并保存,再用startActivityForResult启动目标页面:

public void onClick(View v) {
    // 把点击的View转成Button并保存到成员变量
    clickedDynamicBtn = (Button) v;
    // 准备跳转的Intent
    Intent ir_a_emociones = new Intent(this, emociones_votar.class);
    ir_a_emociones.putExtra("alumno", alumno);
    // 用带请求码的方式启动Activity,方便后续识别返回结果
    startActivityForResult(ir_a_emociones, REQUEST_CODE_VOTAR_EMOCION);
}

步骤3:重写onActivityResult禁用按钮

当从目标Activity返回时,在onActivityResult里判断请求码匹配,就直接禁用之前保存的按钮:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 确认是咱们的投票页面返回的结果
    if (requestCode == REQUEST_CODE_VOTAR_EMOCION) {
        // 不管结果成功还是取消,都禁用按钮(根据需求调整)
        if (clickedDynamicBtn != null) {
            clickedDynamicBtn.setEnabled(false);
            // 还可以给按钮加个状态提示,比如改文字
            clickedDynamicBtn.setText("已投票");
        }
    }
}

额外提示:多动态按钮的情况

如果你有多个动态创建的按钮,怕混淆的话,可以给每个按钮设置唯一的tag,或者用按钮的id作为请求码的一部分,这样返回时能精准定位到对应的按钮。比如:

// 点击时用按钮的id作为请求码的后缀
int btnRequestCode = REQUEST_CODE_VOTAR_EMOCION + v.getId();
startActivityForResult(ir_a_emociones, btnRequestCode);

// 返回时拆分请求码找到对应按钮
if (requestCode >= REQUEST_CODE_VOTAR_EMOCION) {
    int btnId = requestCode - REQUEST_CODE_VOTAR_EMOCION;
    Button targetBtn = findViewById(btnId);
    if (targetBtn != null) {
        targetBtn.setEnabled(false);
    }
}

这样就完美解决动态按钮返回后禁用的问题啦!

内容的提问来源于stack exchange,提问作者M.M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:32:11