动态创建按钮触发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.
相关产品推荐
相关产品推荐

