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

如何通过MainActivity按钮将SubActivity中按钮设为INVISIBLE?

解决MainActivity控制SubActivity按钮状态的问题

首先先修正你SubActivity代码里的明显问题:你给resetH设置了两次点击事件,后面的会直接覆盖前面的逻辑,所以不管怎么点resetH,只会执行resetB.setVisibility(View.INVISIBLE),要么删掉其中一个,要么合并成切换状态的逻辑。

接下来分两种场景实现你的需求:

场景1:启动SubActivity时直接隐藏resetB

如果是MainActivity的按钮点击后启动SubActivity,同时让resetB一开始就是隐藏状态,直接用Intent传参数就行:

MainActivity按钮点击代码

// MainActivity中启动SubActivity的按钮逻辑
Button openSubBtn = findViewById(R.id.open_sub_btn);
openSubBtn.setOnClickListener(v -> {
    Intent intent = new Intent(MainActivity.this, SubActivity.class);
    // 传递标记,告诉SubActivity要隐藏resetB
    intent.putExtra("HIDE_RESET_B", true);
    startActivity(intent);
});

修改SubActivity的onCreate方法

在SubActivity初始化时读取Intent参数,设置按钮状态:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    ImageButton back = findViewById(R.id.back);

    resetH = findViewById(R.id.resetH);
    resetH2 = findViewById(R.id.resetH2);
    resetB = findViewById(R.id.resetB);

    // 读取MainActivity传来的参数,默认不隐藏
    boolean hideResetB = getIntent().getBooleanExtra("HIDE_RESET_B", false);
    if (hideResetB) {
        resetB.setVisibility(View.INVISIBLE);
    }

    // 修正resetH的点击事件(只保留一个,这里做状态切换)
    resetH.setOnClickListener(v -> {
        if (resetB.getVisibility() == View.VISIBLE) {
            resetB.setVisibility(View.INVISIBLE);
        } else {
            resetB.setVisibility(View.VISIBLE);
        }
    });

    back.setOnClickListener(v -> {
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
    });
}

场景2:SubActivity已启动,MainActivity动态控制按钮状态

如果SubActivity已经在后台运行,想通过MainActivity动态隐藏它的resetB,Intent就满足不了了,这里给个简单的广播实现:

第一步:SubActivity中注册广播接收器

private BroadcastReceiver resetBReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 收到广播后隐藏resetB
        resetB.setVisibility(View.INVISIBLE);
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    // ... 其他初始化代码

    // 注册广播过滤器
    IntentFilter filter = new IntentFilter("com.example.action.HIDE_RESET_B");
    registerReceiver(resetBReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    // 页面销毁时注销广播,防止内存泄漏
    unregisterReceiver(resetBReceiver);
}

第二步:MainActivity中发送广播

// MainActivity中控制按钮的点击逻辑
Button hideSubBtn = findViewById(R.id.hide_sub_resetb_btn);
hideSubBtn.setOnClickListener(v -> {
    Intent intent = new Intent("com.example.action.HIDE_RESET_B");
    sendBroadcast(intent);
});

注意:广播方式需要SubActivity处于运行状态(未被销毁)才能收到消息;如果是启动时设置状态,用Intent传参数的方式最直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:50:28