8000 GitHub - wenkaichuang0729/OrderList: 优化列表,代码精简,大量数据也不会造成卡顿 使用AutoSwipeRefreshLayout+RecyclerView+通用Adapte 下拉刷新 上拉加载都已经实现
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

优化列表,代码精简,大量数据也不会造成卡顿 使用AutoSwipeRefreshLayout+RecyclerView+通用Adapte 下拉刷新 上拉加载都已经实现

Notifications You must be signed in to change notification settings

wenkaichuang0729/OrderList

Repository files navigation

OrderList


优化列表,大量数据也不会造成卡顿,代码简洁可读性高
使用AutoSwipeRefreshLayout+RecyclerView+通用Adapter(RecyclerView)
这里Adapter是用张鸿洋封装的Adapter 使用方便(这里没有使用到最简化)
##效果图
图1
List有三种数据类型:
1、OrderGoodsInfo 表示每个小订单的头部信息(订单号、订单状态、店铺名称)
2、OrderGoodsItem 表示小订单中的商品
3、OrderPayInfo 表示大订单的支付信息(金额、订单状态)
将列表一个item分成3个部分(布局一般是固定的)
然后通过Adapter根据不同部分来加载不同布局级数据
具体实现:
数据处理:将请求回来的数据赋值到(OrderGoodsInfo,OrderGoodsItem,OrderPayInfo)

public class OrderDataHelper {

    /**
     * List<Object>有三种数据类型:
     * 1、OrderGoodsInfo 表示每个小订单的头部信息(订单号、订单状态、店铺名称)
     * 2、OrderGoodsItem 表示小订单中的商品
     * 3、OrderPayInfo 表示大订单的支付信息(金额、订单状态)
     *
     * @param resultList
     * @return
     */
    public static List<Object> getDataAfterHandle(List<OrderSummary> resultList) {
        List<Object> dataList = new ArrayList<Object>();

        //遍历每一张大订单
        for (OrderSummary orderSummary : resultList) {
            //大订单支付的金额核定单状态
            OrderPayInfo orderPayInfo = new OrderPayInfo();
            orderPayInfo.setTotalAmount(orderSummary.getTotalPrice());
            orderPayInfo.setStatus(orderSummary.getStatus());
            orderPayInfo.setId(orderSummary.getId());

            //小订单商品的
            List<OrderGoodsItem> orderDetailList = orderSummary.getOrderDetailList();
            Map<String, List<OrderGoodsItem>> orderGoodsMap = new HashMap<String, List<OrderGoodsItem>>();
            Map<String, OrderGoodsInfo> orderInfoMap = new HashMap<String, OrderGoodsInfo>();

            //遍历每个大订单里面的小订单
            for (OrderGoodsItem orderGoodsItem : orderDetailList) {
                //获取小订单里面的商铺信息的订单号
                String orderCode = orderGoodsItem.getOrder().getOrderCode();
                orderGoodsItem.setOrderid(orderSummary.getId());
                //拿到相对应订单号的所有商品
                List<OrderGoodsItem> goodsList = orderGoodsMap.get(orderCode);
                //如果goodsList为空,则新建;而且把这个订单号的orderGoodsMap持有订单的对象goodsList
                if (goodsList == null) {
                    goodsList = new ArrayList<>();
                    orderGoodsMap.put(orderCode, goodsList);
                }
                //goodsList添加商品的对象,因为orderGoodsMap已经持有这个订单号的goodsList对象,所以不用重新put
                goodsList.add(orderGoodsItem);

                //把小订单的店铺信息赋给GoodsOrderInfo对象,并加入到orderInfoMap
                OrderGoodsInfo orderInfo = orderInfoMap.get(orderCode);
                if (orderInfo == null) {
                    orderInfo = new OrderGoodsInfo();
                    orderInfo.setOrderCode(orderCode);
                    orderInfo.setShopName(orderGoodsItem.getOrder().getShopName());
                    orderInfo.setStatus(orderGoodsItem.getOrder().getStatus());
                    orderInfoMap.put(orderCode, orderInfo);
                }
            }
            //把所有数据按照头部、内容和尾部三个部分排序好
            Set<String> keySet = orderGoodsMap.keySet();
            for (String orderCode : keySet) {
                dataList.add(orderInfoMap.get(orderCode));
                dataList.addAll(orderGoodsMap.get(orderCode));
            }
            dataList.add(orderPayInfo);
        }

        return dataList;
    }

}


Adapter:

//返回ViewType
@Override
    public int getItemViewType(int position) {
        if(data.get(position) instanceof OrderGoodsInfo) {
            return ITEM_HEADER;
        }else if(data.get(position) instanceof OrderGoodsItem){
            return ITEM_CONTENT;
        }else if(data.get(position) instanceof OrderPayInfo){
            return ITEM_FOOTER;
        }
        return ITEM_CONTENT;
    }
    
//获取不同的ViewType加载不同视图
@Override
    public RcViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        if(viewType == ITEM_HEADER) {
            view = LayoutInflater.from(context).inflate(R.layout.item_allorder_header, parent, false);
        }else if(viewType == ITEM_CONTENT){
            view = LayoutInflater.from(context).inflate(R.layout.item_allorder_content, parent, false);
        }else if(viewType == ITEM_FOOTER){
            view = LayoutInflater.from(context).inflate(R.layout.item_allorder_footer, parent, false);
        }
        return new RcViewHolder(context,view);
    }

//获取不同的ViewType加载不同的数据(convert 该方法是封装好的Adapter)
@Override
    protected void convert(RcViewHolder holder, Object data, final int position) {
        if(holder.getItemViewType()==ITEM_HEADER){
            OrderGoodsInfo datas = (OrderGoodsInfo)data;
            holder.setText(R.id.tv_orderno,"订单编号:" + datas.getOrderCode())
                  .setText(R.id.tv_shopname,datas.getShopName());
            if(datas.getStatus().equals("0")){
                holder.setText(R.id.tv_state,"待付款");
            }else if(datas.getStatus().equals("1")){
                holder.setText(R.id.tv_state,"待发货");
            }else if(datas.getStatus().equals("2")){
                holder.setText(R.id.tv_state,"待收货");
            }else if(datas.getStatus().equals("3")){
                holder.setText(R.id.tv_state,"交易完成");
            }
        }else if(holder.getItemViewType()==ITEM_CONTENT) {
            OrderGoodsItem datas = (OrderGoodsItem)data;
            holder.setGlidePic(context,R.id.iv_pic,datas.getProductPic())
                  .setText(R.id.tv_title,datas.getProductName())
                  .setText(R.id.tv_num,"共" + datas.getCount() + "件")
                  .setText(R.id.tv_price,"¥" + datas.getTotalPrice());

            final int pos = datas.getOrderid();
            final String name = datas.getProductName();

            holder.setOnClickListener(R.id.ll,new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,name,Toast.LENGTH_SHORT).show();
                }
            });

        }else if(holder.getItemViewType()==ITEM_FOOTER) {
            OrderPayInfo datas = (OrderPayInfo)data;
            holder.setText(R.id.tv_total,datas.getTotalAmount() + "");
            final int pos = datas.getId();
            if(datas.getStatus().equals("0")){
                holder.setText(R.id.tv_submit,"付款");
            }else if (datas.getStatus().equals("2")){
                holder.setText(R.id.tv_submit,"确认收货");
            }else {
                holder.setText(R.id.tv_submit,"再次购买");
            }
            final String status = datas.getStatus();
            holder.setOnClickListener(R.id.tv_submit,new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnBtClickListener.onBtClick(status,position);
                }
            });
        }
    }

About

优化列表,代码精简,大量数据也不会造成卡顿 使用AutoSwipeRefreshLayout+RecyclerView+通用Adapte 下拉刷新 上拉加载都已经实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0