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

