RecyclerView中item页面跳转

一、 功能实现要求

实现:在RecyclerView实现的瀑布流页面布局中,点击任意一个商品,能跳转到其商品详情页。

二、具体实现

文件目录如下:

2.1 跳转后的详情页页面设计

现只考虑跳转实现,以第一个商品详情页面为例设计如下:

若考虑传参可调用函数:
传:intent.putExtra()
收:getStringExtra() 、getIntExtra()

下面需要添加跳转后详情页面的Activity,才能利用intent实现Activity之间的跳转。在R.layout.页面,将页面换成设计对应详情页面的xml文件名称。
在这里插入图片描述

2.2 Adapter中添加item点击事件

在Adapter中的onBindViewHolder函数里,添加监听点击事件

// item点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(context,pic1Activity);
        context.startActivity(intent);
    }
});

代码解析:
① 函数名的itemView指的是单个item的整个内容,当整体被点击则触发事件,如果想只点item中的部分控件(图片、文字),则可改为:

ImageView img1
TextView txt1
holder.img1.setOnClickListener();
holder.txt1.setOnClickListener();

② intent用法:用来在一个组件中启动App中的另一个组件或者是启动另一个App的组件,通常组件为Activity、Service、Broadcast。这里我们使用intent使得在shop页面点击后,能跳转到详情页面的Activity。
函数:Intent(context,pic1Activity.class)
传入参数为(当前页面Activity,跳转后页面的class文件)

2.3 解决跳转到不同详情页面问题

在Adapter中,建立类型为Class的数组用于储存不同的跳转页面的Activity的class文件,目的是为了更换Intent intent=new Intent(context,pic1Activity)中pic1Activity的位置,因此可以将onBindViewHolder代码修改如下:

// MyAdapter函数体内、onBindViewHolder函数体外添加以下代码
private Class[] jumpActivity={pic1Activity.class,pic2Activity.class};
private int i=0;

// onBindViewHolder函数体内添加以下代码
holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(context,i++);
        context.startActivity(intent);
    }
});

2.4 解决不能重复跳转问题

以上设计运行后,会发现所有图片只能点击一次到自己的详情页面,这是因为当变量 i 遍历完整个Class数组后,整个页面的所有监听、跳转就会停止。所以我们使用getAdapterPosition()函数来获取单个item在整个RecyclerView页面的下标索引,使得变量 i 总是可以被重新赋值,即可实现重复跳转。因此代码可改为:

// MyAdapter函数体内、onBindViewHolder函数体外添加以下代码
private Class[] jumpActivity={pic1Activity.class,pic2Activity.class};

// onBindViewHolder函数体内添加以下代码
int i = holder.getAdapterPosition();
holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(context,jumpActivity[i]);
        context.startActivity(intent);
    }
});

三、效果展示

点击前两张图片跳转后:

四、心得体会及源码

此次实验主要是利用intent来实现页面跳转,不同于上课的内容是我们需要在匹配器Adapter中写出RecyclerView中的item点击事件,难点在于:
1)如何点击相应的区域进行跳转?
由于所有的item动态添加,并不能通过给每一个item不同的控件id来监听,而是要通过固定的控件id,也就是说每个item对应的控件id相同,只不过RecyclerView 在动态更替所对应的内容。其中利用holder.itemView即可自动获得单个item的所有内容;
2)如何实现跳转到不同的详情页面且能点击同一个页面重复跳转?
这里使用了getAdapterPosition()获取下标索引。

gitee代码链接

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是 Kotlin 代码示例: 1. 在 RecyclerView 的 Adapter 为每个 item 添加点击事件监听器: ```kotlin class MyAdapter(private val context: Context, private val itemList: List<Item>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { // 1. 定义一个点击事件监听器接口 interface OnItemClickListener { fun onItemClick(item: Item) } // 2. 声明一个 OnItemClickListener 变量 private var listener: OnItemClickListener? = null // 3. 提供一个公共的设置监听器的方法 fun setOnItemClickListener(listener: OnItemClickListener) { this.listener = listener } // ... override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = itemList[position] holder.bind(item) // 4. 为 item 添加点击事件监听器 holder.itemView.setOnClickListener { listener?.onItemClick(item) } } // ... } ``` 2. 在 Activity 设置 RecyclerView 和 Adapter,并实现 OnItemClickListener 接口: ```kotlin class MainActivity : AppCompatActivity(), MyAdapter.OnItemClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val itemList = // 从数据源获取 item 列表 val recyclerView = findViewById<RecyclerView>(R.id.recyclerView) recyclerView.layoutManager = LinearLayoutManager(this) val adapter = MyAdapter(this, itemList) recyclerView.adapter = adapter // 5. 设置 OnItemClickListener adapter.setOnItemClickListener(this) } // 6. 实现 OnItemClickListener 接口的方法,跳转到相应的 Activity override fun onItemClick(item: Item) { val intent = Intent(this, ItemDetailActivity::class.java) intent.putExtra("item_id", item.id) startActivity(intent) } } ``` 以上就是 Kotlin RecyclerView 点击 item 跳转到 Activity 页面的实现方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值