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

如何实现点击RecyclerView不同条目跳转到对应的不同Activity

解决步骤

1. 扩展数据类FeaturedHelperClass

新增字段存储对应跳转的目标Activity类,修改后代码示例:

public class FeaturedHelperClass {
    private int imageRes;
    private String title;
    private String desc;
    // 新增字段:存储目标Activity
    private Class<?> targetActivity;

    // 修改构造方法
    public FeaturedHelperClass(int imageRes, String title, String desc, Class<?> targetActivity) {
        this.imageRes = imageRes;
        this.title = title;
        this.desc = desc;
        this.targetActivity = targetActivity;
    }

    // 新增getter方法
    public Class<?> getTargetActivity() {
        return targetActivity;
    }

    // 原有其他属性的getter保持不变
    // ...
}

2. 初始化列表时绑定每个条目对应的目标Activity

把原有初始化代码修改为如下形式,替换为你项目中实际要跳转的Activity类名即可:

ArrayList<FeaturedHelperClass> featuredLocations = new ArrayList<>();
// 每个条目传入对应的Activity类
featuredLocations.add(new FeaturedHelperClass(R.drawable.auditorium_a, "Mahatma Gandhi Auditorium", "It is a long established fact that a reader.", MahatmaAuditoriumActivity.class));
featuredLocations.add(new FeaturedHelperClass(R.drawable.auditorium_a, "Nethaji Auditorium", "It is a long established fact that a reader.", NethajiAuditoriumActivity.class));
featuredLocations.add(new FeaturedHelperClass(R.drawable.auditorium_a, "V.O.C. Auditorium", "It is a long established fact that a reader.", VOCAuditoriumActivity.class));
featuredLocations.add(new FeaturedHelperClass(R.drawable.audtiorium_b, "Conference Room - AB", "It is a long established fact that a reader.", ConferenceAbActivity.class));
featuredLocations.add(new FeaturedHelperClass(R.drawable.audtiorium_b, "RUBY (Admin Block)", "It is a long established fact that a reader.", RubyAdminActivity.class));
featuredLocations.add(new FeaturedHelperClass(R.drawable.smart_classroom, "Smart Class", "It is a long established fact that a reader.", SmartClassActivity.class));

3. 给Adapter添加条目点击回调

在FeaturedAdapter中定义点击监听接口,绑定条目点击事件:

public class FeaturedAdapter extends RecyclerView.Adapter<FeaturedAdapter.ViewHolder> {
    private ArrayList<FeaturedHelperClass> dataList;
    private Context context;
    // 点击监听接口
    public interface OnItemClickListener {
        void onItemClick(FeaturedHelperClass item);
    }
    private OnItemClickListener listener;

    // 修改构造方法,传入监听实例
    public FeaturedAdapter(ArrayList<FeaturedHelperClass> dataList, Context context, OnItemClickListener listener) {
        this.dataList = dataList;
        this.context = context;
        this.listener = listener;
    }

    // ...其他原有代码保持不变...

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        FeaturedHelperClass currentItem = dataList.get(position);
        // 原有数据绑定逻辑不变
        // ...

        // 给条目根布局设置点击事件
        holder.itemView.setOnClickListener(v -> {
            if (listener != null) {
                listener.onItemClick(currentItem);
            }
        });
    }

    // ...ViewHolder等其他代码保持不变...
}

4. 在当前Activity处理点击跳转逻辑

修改Adapter初始化代码,传入点击回调实现跳转:

adapter = new FeaturedAdapter(featuredLocations, this, item -> {
    // 直接获取当前条目绑定的目标Activity跳转
    Intent intent = new Intent(this, item.getTargetActivity());
    // 如需传递参数可在此处调用putExtra方法
    // intent.putExtra("title", item.getTitle());
    startActivity(intent);
});
featuredRecycler.setAdapter(adapter);

替代方案(不推荐):如果不想修改FeaturedHelperClass结构,也可以在点击回调中通过位置判断跳转目标,缺点是后期新增条目需要修改判断分支,可维护性差:

adapter = new FeaturedAdapter(featuredLocations, this, item -> {
    Class<?> targetActivity;
    switch (holder.getAdapterPosition()) {
        case 0: targetActivity = MahatmaAuditoriumActivity.class; break;
        case 1: targetActivity = NethajiAuditoriumActivity.class; break;
        // 其他位置对应自己的Activity
        default: targetActivity = DefaultActivity.class;
    }
    startActivity(new Intent(this, targetActivity));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:04