如何实现RecyclerView GridLayout项点击跳转Activity及条件点击逻辑
实现方案
疑问解答
- 你不需要额外插入
setOnClickListener,你当前的代码已经采用了接口回调的标准RecyclerView点击实现方案:Adapter中已经给每个Item布局设置了点击监听,点击后会自动回调你在Activity中实现的onItemClick方法,直接在该方法中写逻辑即可。 - 完全可以添加
if else或者switch条件判断,通过识别当前点击的Item标识,执行不同的跳转逻辑即可。
具体实现步骤
方案1:通过Item文本判断(快速实现)
直接修改TrackActivity中的onItemClick方法,根据回调的TrackData的text字段判断跳转目标:
@Override public void onItemClick(TrackData data) { Intent jumpIntent; if ("Latest News".equals(data.text)) { jumpIntent = new Intent(this, LatestNewsActivity.class); } else if ("Open Business".equals(data.text)) { jumpIntent = new Intent(this, OpenBusinessActivity.class); } else if ("Voter's Info".equals(data.text)) { jumpIntent = new Intent(this, VoterInfoActivity.class); } else if ("City Officials".equals(data.text)) { jumpIntent = new Intent(this, CityOfficialsActivity.class); } else if ("City Donation".equals(data.text)) { jumpIntent = new Intent(this, DonationActivity.class); } else if ("Report".equals(data.text)) { jumpIntent = new Intent(this, ReportActivity.class); } else { Toast.makeText(this, "该功能暂未开放", Toast.LENGTH_SHORT).show(); return; } // 可选:向目标Activity传递参数 jumpIntent.putExtra("title", data.text); startActivity(jumpIntent); }
方案2:通过Item类型判断(更规范,避免文本修改导致的判断失效)
- 首先修改
TrackData实体类,新增唯一类型标识字段:
public class TrackData { public String text; public int icon; public String gridBGColor; // 新增类型字段 public int itemType; public TrackData(String text, int icon, String gridBGColor, int itemType) { this.text = text; this.icon = icon; this.gridBGColor = gridBGColor; this.itemType = itemType; } }
- 在
TrackActivity中定义类型常量,初始化列表时传入对应类型:
// 顶部定义Item类型常量 public static final int TYPE_NEWS = 1; public static final int TYPE_BUSINESS = 2; public static final int TYPE_VOTER = 3; public static final int TYPE_OFFICIALS = 4; public static final int TYPE_DONATION = 5; public static final int TYPE_REPORT = 6; // onCreate中初始化列表时传入类型 arrayList.add(new TrackData("Latest News", R.drawable.icon_latest_news, "#64C0E2", TYPE_NEWS)); arrayList.add(new TrackData("Open Business", R.drawable.icon_open_business, "#9CD081", TYPE_BUSINESS)); arrayList.add(new TrackData("Voter's Info", R.drawable.icon_voters_info, "#F7B36A", TYPE_VOTER)); arrayList.add(new TrackData("City Officials", R.drawable.icon_city_officials, "#C78EF7", TYPE_OFFICIALS)); arrayList.add(new TrackData("City Donation", R.drawable.icon_city_donation, "#FFACAC", TYPE_DONATION)); arrayList.add(new TrackData("Report", R.drawable.icon_report, "#E3D672", TYPE_REPORT));
- 修改
onItemClick方法,通过类型判断跳转:
@Override public void onItemClick(TrackData data) { Intent jumpIntent; switch (data.itemType) { case TYPE_NEWS: jumpIntent = new Intent(this, LatestNewsActivity.class); break; case TYPE_BUSINESS: jumpIntent = new Intent(this, OpenBusinessActivity.class); break; case TYPE_VOTER: jumpIntent = new Intent(this, VoterInfoActivity.class); break; case TYPE_OFFICIALS: jumpIntent = new Intent(this, CityOfficialsActivity.class); break; case TYPE_DONATION: jumpIntent = new Intent(this, DonationActivity.class); break; case TYPE_REPORT: jumpIntent = new Intent(this, ReportActivity.class); break; default: Toast.makeText(this, "功能开发中", Toast.LENGTH_SHORT).show(); return; } startActivity(jumpIntent); }
注意事项
- 所有需要跳转的Activity必须提前在
AndroidManifest.xml中注册,否则会触发运行时异常 - 你贴出的
TrackActivity代码中onCreate方法缺少闭合的},请补全后再编译运行
内容的提问来源于stack exchange,提问作者user16955613
相关产品推荐
相关产品推荐

