如何实现RecyclerView的RecentsAdapter每个条目跳转至对应Activity?
解决Recents条目点击跳转对应Activity的问题
问题描述
跟着教程开发App,其中“Recents”行展示地点照片,但点击任意照片都会打开同一个DetailsActivity。已为每张照片创建4个独立Activity,需要实现点击不同照片跳转对应Activity。
解决方案
通过给数据类添加目标Activity字段,配合Adapter动态获取跳转目标来实现:
1. 扩展RecentsData数据类
在RecentsData中新增存储目标Activity的字段,并补充构造方法和getter:
public class RecentsData { // 原有字段:countryName、placeName、price、imageUrl private Class<?> targetActivity; // 更新构造方法,加入targetActivity参数 public RecentsData(String countryName, String placeName, String price, int imageUrl, Class<?> targetActivity) { this.countryName = countryName; this.placeName = placeName; this.price = price; this.imageUrl = imageUrl; this.targetActivity = targetActivity; } // 获取目标Activity的getter方法 public Class<?> getTargetActivity() { return targetActivity; } }
2. 修改Adapter的点击事件逻辑
在RecentsAdapter的onBindViewHolder方法中,替换固定的跳转目标,改为从当前条目数据中获取对应Activity:
@Override public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) { holder.countryName.setText(recentsDataList.get(position).getCountryName()); holder.placeName.setText(recentsDataList.get(position).getPlaceName()); holder.price.setText(recentsDataList.get(position).getPrice()); holder.placeImage.setImageResource(recentsDataList.get(position).getImageUrl()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取当前条目绑定的目标Activity Class<?> targetActivity = recentsDataList.get(position).getTargetActivity(); Intent intent = new Intent(context, targetActivity); context.startActivity(intent); } }); }
3. 初始化数据时绑定对应Activity
创建RecentsData列表时,为每个条目指定对应的Activity类:
List<RecentsData> recentsDataList = new ArrayList<>(); // 根据实际的Activity类替换下面的ActivityA、ActivityB等 recentsDataList.add(new RecentsData("示例国家1", "示例地点1", "¥1000", R.drawable.place_img1, ActivityA.class)); recentsDataList.add(new RecentsData("示例国家2", "示例地点2", "¥1200", R.drawable.place_img2, ActivityB.class)); recentsDataList.add(new RecentsData("示例国家3", "示例地点3", "¥900", R.drawable.place_img3, ActivityC.class)); recentsDataList.add(new RecentsData("示例国家4", "示例地点4", "¥1500", R.drawable.place_img4, ActivityD.class)); // 将列表传入Adapter RecentsAdapter adapter = new RecentsAdapter(this, recentsDataList);
完成以上修改后,点击不同的Recents条目就会打开对应的Activity了。
内容的提问来源于stack exchange,提问作者Mohamed bourhane eldine Siad
相关产品推荐
相关产品推荐

