Android中如何通过字符串数组实现超过10项的自定义ListView?
解决ListView点击第11项崩溃的问题
嘿,我看了你的代码和崩溃日志,问题其实很明确,咱们一步步来解决:
首先看崩溃日志里最关键的一行:
android.content.ActivityNotFoundException: 无法找到明确的活动类{com.mycompany.myapp/com.mycompany.myapp.Spinner_Activity}; 你是否已在AndroidManifest.xml中声明该活动?
这说明你要启动的Spinner_Activity根本没在Android的配置文件里注册,Android系统找不到它,自然就崩溃了。
第一要务:注册Spinner_Activity
打开你的AndroidManifest.xml文件,找到<application>标签,在里面加上这段代码:
<activity android:name=".Spinner_Activity" />
要是这个Activity不需要被外部应用启动,可以加上android:exported="false"来提升安全性:
<activity android:name=".Spinner_Activity" android:exported="false" />
顺便修复一个隐藏的小bug
我注意到你switch-case里的case 0后面没加break!这会导致点击第一个列表项时,程序会先启动Hi.class,紧接着又自动执行case 1的代码启动Ba.class,这绝对不是你想要的效果。
修改后的switch代码应该是这样(给case 0补上break,同时也建议给case 10加上,方便后续扩展):
switch(p3){ case 0: intent=new Intent(MainActivity.this,Hi.class); startActivity(intent); break; // 补上这个break case 1: intent=new Intent(MainActivity.this,Ba.class); startActivity(intent); break; case 2: intent=new Intent(MainActivity.this,Dc.class); startActivity(intent); break; case 3: intent=new Intent(MainActivity.this,Fe.class); startActivity(intent); break; case 4: intent=new Intent(MainActivity.this,Hg.class); startActivity(intent); break; case 5: intent=new Intent(MainActivity.this,Kj.class); startActivity(intent); break; case 6: intent=new Intent(MainActivity.this,Ml.class); startActivity(intent); break; case 7: intent=new Intent(MainActivity.this,On.class); startActivity(intent); break; case 8: intent=new Intent(MainActivity.this,Rp.class); startActivity(intent); break; case 9: intent=new Intent(MainActivity.this,Ts.class); startActivity(intent); break; case 10: intent=new Intent(MainActivity.this, Spinner_Activity.class); startActivity(intent); break; // 加上这个,后续加新case不会出问题 }
给你个优化建议
如果以后你的列表项和对应的Activity越来越多,switch-case会变得特别臃肿难维护。可以用一个映射数组来简化代码:
// 在MainActivity类里定义一个数组,把每个列表项对应的Activity按顺序放进去 Class<?>[] targetActivities = { Hi.class, Ba.class, Dc.class, Fe.class, Hg.class, Kj.class, Ml.class, On.class, Rp.class, Ts.class, Spinner_Activity.class }; // 然后在onItemClick里直接这么写: Intent intent = new Intent(MainActivity.this, targetActivities[p3]); startActivity(intent);
这样以后加新的列表项和Activity,只需要往数组里加对应的Class就行,代码清爽多了。
内容的提问来源于stack exchange,提问作者I want ask
相关产品推荐
相关产品推荐

