如何实现点击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
相关产品推荐
相关产品推荐

