Android仿淘宝京东商品规格参数颜色筛选

Android 选择商品属性sku

最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问题,而多种熟悉问题貌似没有人分享,所以写出来思路,具体重点方法,提供给需要的人:
这是我的界面初始化刚进来的效果,有三种状态红色 灰色 黑色]![这里写图片描述
数据是这样的分两个大块儿 第一块儿就是刚进来的初始化数据List
第二块数据是有几种产品List 最终咱们要通过这个集合里的数据进行比较 来对按钮的颜色刷新,有红色灰色黑色

"{\"retCode\":\"0000\",\"retMsg\":\"操作成功\",\"retData\":[{\"goodsDetailVo\":{\"productId\":73318,\"saId\":2020409,\"productName\":\"荣耀 V9 play 3G+32G 极光蓝 全网通 原装\",\"mobileimg\":\"/20170914153743595_596.jpg\",\"overplusnumber\":1000,\"maxPrice\":null,\"minPrice\":1,\"activeId\":null,\"actyDetailId\":null,\"active_type\":-1,\"saleType\":\"2\",\"is_limited\":null,\"limited_num\":null,\"supply_city_name\":\"香港特别行政区\",\"buyer_county_name\":null,\"local_time\":null,\"local_before_date\":\"\",\"local_after_date\":\"\",\"orderCount\":0,\"productParams\":[{\"param\":\"颜色\",\"attrTypeLs\":[{\"value\":\"极光蓝\",\"select\":\"1\"},{\"value\":\"铂光金\",\"select\":\"0\"},{\"value\":\"幻夜黑\",\"select\":\"0\"}]},{\"param\":\"内存\",\"attrTypeLs\":[{\"value\":\"3G+32G\",\"select\":\"0\"},{\"value\":\"4G+32G\",\"select\":\"1\"}]},{\"param\":\"版本\",\"attrTypeLs\":[{\"value\":\"全网通\",\"select\":\"1\"}]},{\"param\":\"备注\",\"attrTypeLs\":[{\"value\":\"原装\",\"select\":\"1\"}]}],\"productLs\":[{\"productId\":73319,\"saId\":2020418,\"productName\":\"荣耀 V9 play 4G+32G 极光蓝 全网通 原装\",\"mobileimg\":\"/20170914153743595_596.jpg\",\"overplusnumber\":1000,\"minPrice\":1,\"maxPrice\":null,\"activeId\":null,\"actyDetailId\":null,\"active_type\":0,\"saleType\":\"2\",\"is_limited\":null,\"limited_num\":null,\"orderCount\":null,\"params\":[\"极光蓝\",\"4G+32G\",\"全网通\",\"原装\"],\"publicity\":false,\"actTime\":false},{\"productId\":73320,\"saId\":2020417,\"productName\":\"荣耀 V9 play 3G+32G 幻夜黑 全网通 原装\",\"mobileimg\":\"/20170914153819308_990.jpg\",\"overplusnumber\":1000,\"minPrice\":1,\"maxPrice\":null,\"activeId\":null,\"actyDetailId\":null,\"active_type\":0,\"saleType\":\"2\",\"is_limited\":null,\"limited_num\":null,\"orderCount\":null,\"params\":[\"幻夜黑\",\"3G+32G\",\"全网通\",\"原装\"],\"publicity\":false,\"actTime\":false},{\"productId\":73321,\"saId\":2020416,\"productName\":\"荣耀 V9 play 3G+32G 铂光金 全网通 原装\",\"mobileimg\":\"/20170914153849981_60.jpg\",\"overplusnumber\":1000,\"minPrice\":1,\"maxPrice\":null,\"activeId\":null,\"actyDetailId\":null,\"active_type\":0,\"saleType\":\"2\",\"is_limited\":null,\"limited_num\":null,\"orderCount\":null,\"params\":[\"铂光金\",\"3G+32G\",\"全网通\",\"原装\"],\"publicity\":false,\"actTime\":false},{\"productId\":73318,\"saId\":2020409,\"productName\":\"荣耀 V9 play 3G+32G 极光蓝 全网通 原装\",\"mobileimg\":\"/20170914153743595_596.jpg\",\"overplusnumber\":1000,\"minPrice\":1,\"maxPrice\":null,\"activeId\":null,\"actyDetailId\":null,\"active_type\":0,\"saleType\":\"2\",\"is_limited\":null,\"limited_num\":null,\"orderCount\":null,\"params\":[\"极光蓝\",\"3G+32G\",\"全网通\",\"原装\"],\"publicity\":false,\"actTime\":false},],\"publicity\":false,\"actTime\":false}}],\"cmd\":null,\"totalDataCount\":1,\"serviceTime\":1524020996415}"

最重要的就是adapter中对数据的逻辑处理,筛选,比对,结果集中拿到真正的数据 进行UI更新

/**
     * 刚进页面 给默认值
     *
     * @param
     */
    private void initData() {
        for (int y = 0; y < childrenViews.length; y++) {
            for (int z = 0; z < childrenViews[y].length; z++) {
                //TextView textView = childrenViews[y][z];
                if ("1".equals(mData.get(y).getAttrTypeLs().get(z).getSelect())) {
                    String value = childrenViews[y][z].getText().toString();
                    selectedValue[y] = value;

                }
            }
        }
        myInterface.selectedAttribute(selectedValue, paramsBean.getMobileimg(), paramsBean.getMinPrice() + "", paramsBean.getOverplusnumber() + "");
    }
private void getSelectedProduct() {//获取选中当前哪一款商品
            for (int i = 0; i < stockGoodsList.size(); i++) {
                for (int j = 0; j < stockGoodsList.get(i).getParams().size(); j++) {
                    String str = stockGoodsList.get(i).getParams().get(j);
                    String selValue = selectedValue[j];
                    if (selValue.equals(str)) {
                        if (j == stockGoodsList.get(i).getParams().size() - 1) {
                            index = i;
                        }
                    }else{
                        break;
                    }
                }
            }
            //Log.d("-----------index-->",index+"");
        }

代码太多就不一一列举了 发个demo给大家借鉴一下 只要数据吻合 界面效果自然就出来啦
下面附上我的demo csdn下载地址

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Android 仿淘宝规格商品规格选择,可以按照以下步骤进行: 1. 定义商品规格数据结构 首先需要定义一个数据结构来表示商品规格,例如: ```java class Spec { private String name; // 规格名称 private List<String> values; // 规格值列表 private int selected; // 选中的规格值索引 // getter 和 setter 方法 } ``` 2. 构建商品规格列表 根据商品规格数据,可以构建一个规格列表。可以使用 RecyclerView 来展示规格列表,其中每一个条目表示一个规格,例如: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/spec_list" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 在 RecyclerView 中,可以使用一个 LinearLayoutManager 来管理条目布局,同时需要自定义一个 Adapter 来为 RecyclerView 提供数据。 3. 实现规格条目布局 对于每一个规格条目,可以使用一个 LinearLayout 来布局,其中包含一个规格名称和一个规格值列表。规格值列表可以使用一个 HorizontalScrollView 和一个 LinearLayout 来实现,例如: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/spec_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="规格名称" /> <HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/spec_values" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" /> </HorizontalScrollView> </LinearLayout> ``` 在代码中,可以通过 findViewByid() 方法来获取规格名称和规格值列表的 View 对象。 4. 实现规格值条目布局 对于每一个规格值条目,可以使用一个 CheckBox 来布局,例如: ```xml <CheckBox android:id="@+id/spec_value" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="规格值" /> ``` 在代码中,可以通过 findViewByid() 方法来获取 CheckBox 对象,并且设置 CheckBox 的监听器来处理选中事件。 5. 处理规格选择事件 当用户选择了某个规格值,需要更新其他规格的可选项。可以在代码中为每个规格规格值列表设置一个监听器,当某个规格值被选中时,需要更新其他规格的可选项。例如: ```java class SpecValueClickListener implements View.OnClickListener { private Spec spec; private int index; public SpecValueClickListener(Spec spec, int index) { this.spec = spec; this.index = index; } @Override public void onClick(View v) { // 更新选中状态 spec.setSelected(index); // 更新其他规格的可选项 for (Spec s : specs) { if (s != spec) { List<String> values = s.getValues(); for (int i = 0; i < values.size(); i++) { String value = values.get(i); boolean enabled = false; for (Spec other : specs) { if (other != s && other.getSelectedValue().equals(value)) { enabled = true; break; } } setSpecValueEnabled(s, i, enabled); } } } // 更新 UI updateUI(); } } ``` 在上面的代码中,我们首先更新了选中的规格值,然后遍历了其他规格规格值列表,对每个规格值设置可选状态,最后更新了 UI。 6. 更新 UI 当用户选择规格值时,需要更新 UI 来反映当前选择规格,例如: ```java private void updateUI() { // 更新规格值选中状态 for (Spec spec : specs) { LinearLayout specValuesLayout = specViews.get(spec); for (int i = 0; i < specValuesLayout.getChildCount(); i++) { CheckBox specValue = (CheckBox) specValuesLayout.getChildAt(i); specValue.setChecked(i == spec.getSelected()); } } // 更新商品价格和库存 int price = 0; int stock = Integer.MAX_VALUE; for (Goods goods : goodsList) { if (isSpecMatched(goods, specs)) { price = goods.getPrice(); stock = Math.min(stock, goods.getStock()); } } priceView.setText(String.valueOf(price)); stockView.setText(String.valueOf(stock)); } ``` 在上面的代码中,我们遍历了所有的规格,更新了规格值的选中状态,然后根据当前选择规格计算出商品的价格和库存,并更新 UI。 完成上述步骤后,即可实现 Android 仿淘宝规格商品规格选择

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值