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

ListView跳转Activity时Switch&Case逻辑异常问题求助

解决ListView跳转Activity时Switch-Case导致返回键异常的问题

嘿,别不好意思,新手踩这种坑太正常了!我来帮你梳理一下问题的根源和解决办法~

问题原因分析

你遇到的返回键要依次经过所有已打开Activity的情况,90%的概率是Switch-Case代码里漏写了break语句!

当你在Switch中处理ListView的点击位置时,如果某个case执行完后没有加break,程序会继续往下执行后续所有case的代码。比如你点击了position 0的列表项,代码执行完case 0的启动逻辑后,会接着跑case 1、case 2的启动代码,相当于一次性启动了好几个Activity。这样Android的任务栈里就会堆积:初始页面 → ActivityA → ActivityB → ActivityC...,返回键自然要逐个退出才能回到初始页。

而if判断的写法是互斥的,满足一个条件后就不会执行后续的if分支,所以不会出现多启动的情况。

错误代码示例(你可能踩的坑)

listView.setOnItemClickListener((parent, view, position, id) -> {
    switch (position) {
        case 0:
            startActivity(new Intent(this, ActivityA.class));
            // 这里漏掉了break!
        case 1:
            startActivity(new Intent(this, ActivityB.class));
            break;
        case 2:
            startActivity(new Intent(this, ActivityC.class));
            break;
    }
});

点击position 0时,会同时启动ActivityA和ActivityB,返回时先退ActivityB,再退ActivityA,最后回到初始页面,和你描述的异常完全匹配。

正确的Switch-Case写法

给每个case分支加上break,确保只执行当前位置对应的启动逻辑:

listView.setOnItemClickListener((parent, view, position, id) -> {
    Intent targetIntent = null;
    switch (position) {
        case 0:
            targetIntent = new Intent(this, ActivityA.class);
            break; // 必须加!
        case 1:
            targetIntent = new Intent(this, ActivityB.class);
            break; // 必须加!
        case 2:
            targetIntent = new Intent(this, ActivityC.class);
            break; // 必须加!
        default:
            // 处理未知位置的情况
            break;
    }
    // 统一启动Activity,避免重复代码
    if (targetIntent != null) {
        startActivity(targetIntent);
    }
});

额外检查项

如果加了break还是有问题,可以检查下Manifest中这些Activity的launchMode设置,有没有不小心设成了singleInstance之类的特殊模式(新手一般不会改这个,所以优先级低)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:17:24