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

如何在ViewPager中展示单个商品的多组图文详情,是否需要适配器?

解决方案

你只需要调整3处代码即可实现需求:

1. 补全ViewPager子布局的文本控件ID

先给item_view_pager_layout.xml里的文本控件添加ID,方便后续赋值:

<com.abc.xyz.utils.MSPTextViewBold
    android:id="@+id/tv_item_desc"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:textColor="@color/colorPrimaryDark"
    tools:text="This is a sample text" />

2. 重构ViewPager适配器

原适配器是接收商品列表的,现在修改为接收单个商品对象,自动解析内部的多组图文:

class ItemViewPagerAdapter(
    private val context: Context, 
    private val item: Item
) : RecyclerView.Adapter<ItemViewPagerAdapter.MyViewHolder>() {

    // 先把图文总数转成Int,兜底默认1页避免崩溃
    private val itemCount = try {
        item.image_count.toInt()
    } catch (e: Exception) {
        1
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        return MyViewHolder(ItemViewPagerLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false))
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // position从0开始,对应第1组到第N组图文
        val (imageUrl, text) = when(position + 1) {
            1 -> item.image_url1 to item.text1
            2 -> item.image_url2 to item.text2
            3 -> item.image_url3 to item.text3
            4 -> item.image_url4 to item.text4
            5 -> item.image_url5 to item.text5
            6 -> item.image_url6 to item.text6
            7 -> item.image_url7 to item.text7
            8 -> item.image_url8 to item.text8
            9 -> item.image_url9 to item.text9
            10 -> item.image_url10 to item.text10
            else -> item.image_url1 to item.text1
        }
        // 加载图片和文本
        GlideLoader(context).loadProductPicture(imageUrl, holder.binding.ivItems)
        holder.binding.tvItemDesc.text = text
    }

    override fun getItemCount(): Int {
        return itemCount
    }

    class MyViewHolder(val binding: ItemViewPagerLayoutBinding):RecyclerView.ViewHolder(binding.root)
}

3. 修改Activity中适配器初始化逻辑

直接把拿到的单个商品对象传给适配器即可:

private fun openViewPager(itemDetails: Item) {
    val adapter = ItemViewPagerAdapter(this, itemDetails)
    binding.vpItems.adapter = adapter
}

注意事项

  • 注意你的代码中Model类名存在Item/Items混用的情况,需要根据你实际的类名统一调整,避免类型不匹配报错
  • 如果后端存储的image_count本身就是数字类型,建议直接把Model类里的image_count字段改成Int类型,省去转换步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:03