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

Android中两个按钮跳转同一Activity问题求助

问题原因与解决方案

你遇到的问题核心是switch语句的case分支缺少break关键字,这是Java开发里很容易踩的小坑——当某个case的代码执行完毕后,如果没有break,程序会直接“贯穿”到下一个case继续执行,不会跳出switch结构。

看你的onClick方法就能发现问题:

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.startBtn:
            intent = new Intent(this, Semester.class);
            startActivity(intent);
            Toast.makeText(this, "startBtn", Toast.LENGTH_SHORT).show();
            this.finish();
            // 这里没有break,代码会直接往下执行statisticsBtn的逻辑
        case R.id.statisticsBtn:
            intent = new Intent(this, Statistics.class);
            startActivity(intent);
            Toast.makeText(this, "statisticsBtn", Toast.LENGTH_SHORT).show();
            this.finish();
    }
}

所以点击startBtn时,代码先执行了启动Semester的逻辑,但因为没有break,直接跑到下面的statisticsBtn分支,又启动了Statistics页面,最后你看到的就是Statistics,同时两个Toast可能先后弹出(或者被后面的覆盖)。

修正后的代码

只需要给每个case分支加上break即可:

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.startBtn:
            Intent semesterIntent = new Intent(this, Semester.class);
            startActivity(semesterIntent);
            Toast.makeText(this, "startBtn", Toast.LENGTH_SHORT).show();
            this.finish();
            break; // 添加break,跳出switch结构
        case R.id.statisticsBtn:
            Intent statsIntent = new Intent(this, Statistics.class);
            startActivity(statsIntent);
            Toast.makeText(this, "statisticsBtn", Toast.LENGTH_SHORT).show();
            this.finish();
            break; // 添加break
    }
}

额外小建议

  • 不用在类成员变量里提前声明Intent intent,直接在每个case里创建局部Intent更安全,避免重复赋值或者空指针问题
  • 如果之后需要从Semester/Statistics页面回到MainActivity,那this.finish()可以去掉,否则MainActivity会被销毁,返回时直接退出app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:22:55