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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:35