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
相关产品推荐
相关产品推荐

