Android 选择商品属性sku

2016-08-25 19:17:15来源:CSDN作者:pengkun520人点击

Android 选择商品属性sku

最近项目中使用SKU属性查询,类似淘宝京东商品的选择,在网上查询了弄了几个源码看看,发现还是实现不了多属性选择问题,再原基础上改动相当费事,所以想干脆自己处理这个问题,而多种熟悉问题貌似没有人分享,所以写出来思路,具体重点方法,提供给需要的人:

本次写出的三个属性,如果需要更多属性,耐心参照此Demo一定可以写出,此Demo还未完成全部,比如动态如果只有2个属性的时候,一个属性的时候,都未作出自动调整,此次只作记录,希望可以给大家提供一种思路

首先来看看效果图

这里写图片描述

相信效果图,已一目了然,选择其中的属性,来动态改变状态,置灰 ,不可点击等。

第一步,先说数据问题

这个数据刚开始讨论挺复杂,第一种方案

{"id":"1233","color":"红色","size":"38","style":"男","stock_count":"9"},{"id":"12332","color":"红色","size":"39","style":"男","stock_count":"0",}

每一个款需要存ID,颜色,大小,款式,库存,
写了一段代码,发现这些数据其实在更新Sku属性查询的效果上没有使用,所以后台数据根据前端实现进行了调整。调整后的数据结果大致为

{"0-0-0","9-12341","0-1-0","0-12332",}

相信大家都看懂了,key调整为下标,value为库存-商品ID
为什么这么调整,后面你就能知道了。

第二步说说UI了

按钮肯定为动态生成,而这个排序其实也有规律,一个属性含有多个值,每一个属性只可单选 每种属性只能选中一个,如果,属性我用下标0开始,那么3种属性,就会有 0 ,1 ,2三个值了,看到这里 你应该知道为什么数据用数字来标识了吧,通过下标来判断按钮。
而每个属性里,0-1,0-2,0-3,0-4,0-5,…..
这样三种属性的按钮对应的标识自然就出来了 ,

0-0,0-1,0-2,0-3,0-41-0,1-1,1-2,1-3,1-42-0,2-1

第三步,开始撸了

说说绘制方法,走过不少弯路,哎,直接说说最无奈的方法,
每一次点击需要把所有的按钮状态全部刷新,记住这个了,始终当时我没跳出来

这里写图片描述

贴出方法吧,

   /**     * 点击某个后产生的新SurplusList     * @param tag 按钮的属性     * @return     */ private List<GoodStock> initSurplusList(String tag) {        List<GoodStock> surplusList = new ArrayList<GoodStock>();        if (toTextViewTagToRows(tag).equals("0")) {            for (GoodStock stock : mList) {                if (stock.getKey().startsWith(toTextViewTagToColumns(tag))) {                    surplusList.add(stock);                }            }        } else if (toTextViewTagToRows(tag).equals("1")) {            for (GoodStock stock : mList) {                if (toAttrMiddleColumns(stock.getKey()).equals(toTextViewTagToColumns(tag))) {                    surplusList.add(stock);                }            }        } else if (toTextViewTagToRows(tag).equals("2")) {            for (GoodStock stock : mList) {                if (stock.getKey().endsWith(toTextViewTagToColumns(tag))) {                    surplusList.add(stock);                }            }        }        return surplusList;    }

这里应该不需要解释了,根据点击按钮属性,代入算出对应的List

接下来,刷新按钮了,这个地方坑太多了

  private void onRefreshAllTextView(List<GoodStock> surplusList, TextView mTextView) {        //开始遍历        for (TextView TextView : TextViewList) {            String nTag = TextView.getTag().toString();            String nSelTag = mTextView.getTag().toString();            //已经选中一个            if (selectTextView.size() == 1) {                if (!toTextViewTagToRows(nTag).equals(toTextViewTagToRows(nSelTag))) {                    //不同一行 在剩下的交集里刷新剩下的按钮                    onOneRefreshTextView(surplusList, TextView);                }            } else if (selectTextView.size() == 2) {                TextView selOneTextView = selectTextView.get(0);                TextView selTwoTextView = selectTextView.get(1);                String selOneTextViewTag = selOneTextView.getTag().toString();                String selTwoTextViewTag = selTwoTextView.getTag().toString();                //当前点击的按钮。得到对应的List                if (!toTextViewTagToRows(nTag).equals(toTextViewTagToRows(selTwoTextViewTag))) {                    surplusList = initSurplusList(selTwoTextViewTag);                } else {                    surplusList = initSurplusList(selOneTextViewTag);                }                onTwoRefreshTextView(surplusList, TextView);            } else if (selectTextView.size() == 3) {                onLastRefreshTextView(TextView);            }        }    }

思路就是 只有一个选中时,去掉重复选中的,然后去onOneRefreshTextView刷新按钮,
第一个按钮刷新方法 我也贴出来了,

   /**     * 刷新按钮     *     * @param surplusList 选中条件后的集合     * @param TextView    每一个按钮     */    private void onOneRefreshTextView(List<GoodStock> surplusList, TextView TextView) {        String TextViewTag = TextView.getTag().toString();        //选中按钮的行数        String mRows = toTextViewTagToRows(TextViewTag);        String mColumns = toTextViewTagToColumns(TextViewTag);//选中按钮的列        //不在一行        for (GoodStock stock : surplusList) {            String stockKey = stock.getKey();            if (mRows.equals("0")) {                if (toAttrStartColumns(stockKey).equals(mColumns)) {                    TextView.setEnabled(true);                    break;                } else {                    TextView.setEnabled(false);                }            } else if (mRows.equals("1")) {                if (toAttrMiddleColumns(stockKey).equals(mColumns)) {                    TextView.setEnabled(true);                    break;                } else {                    TextView.setEnabled(false);                }            } else if (mRows.equals("2")) {                if (toAttrLastColumns(stockKey).equals(mColumns)) {                    TextView.setEnabled(true);                    break;                } else {                    TextView.setEnabled(false);                }            }        }    }

这样 无论点击哪种属性值,单个点击,都可以实现 单个按钮全局刷新了,这一波 先说到这
大家看看思路

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台