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

Android中ListView子项点击跳转对应新Activity的实现咨询

实现ListView子项点击跳转对应Activity的方案

需求与已完成开发

需要实现点击ListView的每个子项时打开对应的新Activity,目前已完成以下开发:

  • 创建字符串数组资源
  • 完成ListView及子项布局
  • 编写自定义BaseAdapter(InformatiiAdapter)
  • 在主Activity(Informatii)中设置了ListView点击事件,但未完善跳转逻辑

已完成代码片段

  1. 字符串数组资源:
<string-array name="title">
        <item>eeeeee </item>
        <item>wwwww </item>
        <item>qqqqq </item>
        <item>aaaaa </item>
        <item>nnnnn </item>
        <item>ccccc </item>
</string-array>
  1. 自定义BaseAdapter(InformatiiAdapter):
public class InformatiiAdapter extends BaseAdapter {
    Informatii informatii;
    String[] title;
    Animation animation;

    public InformatiiAdapter(Informatii informatii, String[] title) {
        this.informatii = informatii;
        this.title = title;
    }
    public static int getRandom(int max)
    {
        return (int )(Math.random()*max);
    }
    @Override
    public int getCount() {
        return title.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView= LayoutInflater.from(informatii).inflate(R.layout.new_item_layout, parent, false);
        animation= AnimationUtils.loadAnimation(informatii, R.anim.animation1);
        TextView textView;
        LinearLayout ll_bg;
        ll_bg=convertView.findViewById(R.id.ll_bg);
        textView=convertView.findViewById(R.id.textView);
        int number=getRandom(8);
        if(number==1)
        {
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_1));
        } else if(number==2){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_2));
        } else if(number==3){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_3));
        } else if(number==4){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_4));
        } else if(number==5){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_5));
        } else if(number==6){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_6));
        } else if(number==7){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_7));
        } else if(number==8){
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_8));
        } else {
            ll_bg.setBackground(ContextCompat.getDrawable(informatii,R.drawable.gradient_1));
        }

        textView.setText(title[position]);
        textView.setAnimation(animation);
        return convertView;
    }
}
  1. 主Activity(Informatii)现有代码:
public class Informatii extends AppCompatActivity {
    ListView listView;
    Animation animation;
    String[] title;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_informatii);
        getSupportActionBar().setTitle("Informații anxietate");

        listView=findViewById(R.id.list_view);
        title=getResources().getStringArray(R.array.title);
        InformatiiAdapter adapter=new InformatiiAdapter(Informatii.this, title);
        animation= AnimationUtils.loadAnimation(this,R.anim.animation1);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==1){
                    Intent intent= new Intent(Informatii.this, Anxietate.class);
                }

            }
        });
    }
}

解决方案

方案一:使用switch-case匹配position

直接根据子项的position值,匹配对应的Activity并启动:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = null;
        switch (position) {
            case 0:
                intent = new Intent(Informatii.this, EeeeeeActivity.class); // 对应第一个子项"eeeeee"
                break;
            case 1:
                intent = new Intent(Informatii.this, Anxietate.class); // 对应第二个子项"wwwww"
                break;
            case 2:
                intent = new Intent(Informatii.this, QqqqqActivity.class); // 对应第三个子项"qqqqq"
                break;
            case 3:
                intent = new Intent(Informatii.this, AaaaaActivity.class); // 对应第四个子项"aaaaa"
                break;
            case 4:
                intent = new Intent(Informatii.this, NnnnnActivity.class); // 对应第五个子项"nnnnn"
                break;
            case 5:
                intent = new Intent(Informatii.this, CccccActivity.class); // 对应第六个子项"ccccc"
                break;
            // 若有第七个子项,添加以下代码
            // case 6:
            //     intent = new Intent(Informatii.this, XxxxxActivity.class);
            //     break;
        }
        if (intent != null) {
            startActivity(intent);
        }
    }
});

方案二:使用Activity类数组映射(更易维护)

将Activity类与子项顺序绑定到数组中,后续修改只需调整数组,无需改动逻辑:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 数组顺序需与字符串数组"title"的子项顺序完全对应
        Class<?>[] activityClasses = {
                EeeeeeActivity.class,
                Anxietate.class,
                QqqqqActivity.class,
                AaaaaActivity.class,
                NnnnnActivity.class,
                CccccActivity.class
                // 第七个子项对应的Activity添加在此
                // XxxxxActivity.class
        };

        // 避免数组越界
        if (position >= 0 && position < activityClasses.length) {
            Intent intent = new Intent(Informatii.this, activityClasses[position]);
            startActivity(intent);
        }
    }
});

注意事项

  • 所有跳转目标Activity必须在AndroidManifest.xml中注册,示例:
<activity android:name=".EeeeeeActivity"/>
<activity android:name=".Anxietate"/>
<activity android:name=".QqqqqActivity"/>
<!-- 其他Activity同理添加 -->
  • 代码中的Activity类名请替换为你项目中的实际类名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:34:55