返回

Android打造淘宝、京东同款商品选择器:实用指南

Android

前言

在现代电子商务中,商品选择器是一个至关重要的功能,它允许用户根据不同的属性(如颜色、尺寸、款式)对产品进行筛选和选择。淘宝和京东等领先的电商平台提供直观且用户友好的商品选择器,为用户提供了无缝的购物体验。

本指南将引导你打造一款功能强大的Android商品选择器,模仿淘宝和京东等平台,让你轻松实现产品属性选择、多选/单选模式和自定义UI元素。

先决条件

在开始之前,确保你具备以下先决条件:

  • Android Studio开发环境
  • 基本的Android开发知识
  • XML布局和Kotlin或Java编程技能

构建商品选择器

1. 创建布局文件

首先,创建一个XML布局文件,它将充当商品选择器的基础结构:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 商品属性选择器 -->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_attributes"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintTop_toTopOf="parent" />

    <!-- SKU选择器 -->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_skus"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintTop_toBottomOf="@id/rv_attributes" />

</androidx.constraintlayout.widget.ConstraintLayout>

2. 创建数据适配器

接下来,为商品属性和SKU创建两个数据适配器:

属性适配器:

class AttributesAdapter(private val attributes: List<Attribute>) : RecyclerView.Adapter<AttributesAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_attribute, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(attributes[position])
    }

    override fun getItemCount(): Int = attributes.size

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(attribute: Attribute) {
            itemView.tv_attribute_name.text = attribute.name
            itemView.rv_attribute_values.adapter = AttributeValuesAdapter(attribute.values)
        }
    }
}

SKU适配器:

class SkusAdapter(private val skus: List<Sku>) : RecyclerView.Adapter<SkusAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sku, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(skus[position])
    }

    override fun getItemCount(): Int = skus.size

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bind(sku: Sku) {
            itemView.tv_sku_name.text = sku.name
            itemView.tv_sku_price.text = sku.price
        }
    }
}

3. 设置UI元素

接下来,初始化布局文件中的UI元素并设置适配器:

class ProductSelectorActivity : AppCompatActivity() {

    private lateinit var rvAttributes: RecyclerView
    private lateinit var rvSkus: RecyclerView
    private lateinit var attributesAdapter: AttributesAdapter
    private lateinit var skusAdapter: SkusAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_product_selector)

        rvAttributes = findViewById(R.id.rv_attributes)
        rvSkus = findViewById(R.id.rv_skus)

        val attributes = listOf(
            Attribute("颜色", listOf("红色", "蓝色", "绿色")),
            Attribute("尺寸", listOf("S", "M", "L", "XL"))
        )
        attributesAdapter = AttributesAdapter(attributes)
        rvAttributes.adapter = attributesAdapter

        val skus = listOf(
            Sku("红色S", "100元"),
            Sku("红色M", "120元"),
            Sku("红色L", "140元"),
            Sku("蓝色S", "110元"),
            Sku("蓝色M", "130元"),
            Sku("蓝色L", "150元"),
            Sku("绿色S", "120元"),
            Sku("绿色M", "140元"),
            Sku("绿色L", "160元")
        )
        skusAdapter = SkusAdapter(skus)
        rvSkus.adapter = skusAdapter
    }
}

4. 处理用户交互

最后,处理用户交互以更新SKU列表:

class AttributesAdapter(private val attributes: List<Attribute>) : RecyclerView.Adapter<AttributesAdapter.ViewHolder>() {

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.itemView.setOnClickListener {
            val selectedAttribute = attributes[position]

            // 更新SKU列表,基于已选属性
            updateSkus(selectedAttribute.values[holder.itemView.findViewById<TextView>(R.id.tv_attribute_value).tag as Int])
        }
    }

    private fun updateSkus(selectedValue: String) {
        val filteredSkus = listOf(
            // 筛选满足条件的SKU
        )
        skusAdapter.submitList(filteredSkus)
    }
}

自定义UI元素

为了进一步提升用户体验,可以自定义商品选择器的UI元素:

  • 属性选择器: 设置不同的文本颜色和背景颜色,以区分已选和未选属性。
  • SKU选择器: 使用自定义布局,提供更直观的SKU详情视图,如商品图片、和库存信息。

结论

通过遵循本指南,你已经成功打造了一款功能强大的Android商品选择器,它模仿了淘宝和京东等平台的特性。通过自定义UI元素和处理用户交互,你可以进一步完善该组件,为你的应用用户提供无缝的购物体验。