Android仿淘宝订单页面实现

http://blog.csdn.net/Ideaqjjl/article/details/51043644
一般电商项目会涉及到的订单管理模块,类似淘宝样式的订单这里写图片描述

主要是讲一下订单页面的实现。当然实现的方法有很多,我知道的有两种方法:一种是采用listview嵌套listview的方式,这种方式需要重写listview中onMearsure方法;还有一种是采用接口回调的方式,这种方式主要对后台返回的数据有依赖;
今天主要说下第二种方法:
实现的思想:首先Tab下面的布局还是用一个listview实现,然后将listview中的item分为上中下三部分内容;
创建三个xml文件,分别实现三个布局;第一部分为店铺名称那一栏,第二部分为商品信息那一栏,第三部分为订单状态那一栏;
然后创建一个回调接口
代码如下

public interface OrderContent
{
public int getLayout();
public boolean isClickable();
public View getView(Context context, View convertView, LayoutInflater inflater);
}

利用接口回调分别实现三个布局

第一部分

public class ItemOrderTop implements OrderContent {
    private Order order;

    private OnceSendView2 shopImageView;
    private List<Order_goods> list;
    private ACache aCache;

    public ItemOrderTop(Order order, List<Order_goods> list) {

        this.order = order;
        this.list = list;
    }

    @Override
    public int getLayout() {
        return R.layout.item_order_top;
    }

    @Override
    public boolean isClickable() {
        return true;
    }

    public Order order() {
        return order;
    }

    @Override
    public View getView(final Context context, View convertView, LayoutInflater inflater) {
        aCache = ACache.get(context);
        inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(getLayout(), null);

        final GTextView orderId = (GTextView) convertView.findViewById(R.id.tv_order_num1);

        GTextView orderstatus = (GTextView) convertView.findViewById(R.id.tv_order_state1);

        orderId.setText("订单号码:" + order.getOrder_sn());


        switch (order.getStatus().toString()) {
            case "20":
                orderstatus.setText("待发货");
                break;
            case "30":
                orderstatus.setText("已发货");
                break;
            case "40":
                orderstatus.setText("已收货待评价");
                break;
            default:
                break;

        }


        return convertView;
    }

}

中间部分

public class OrderIMiddle implements OrderContent {
    private Order_goods order_goods;
    private ImageLoader imageLoader;
    private DisplayImageOptions options;

    List<Order_goods> order_goodsList;
    private String status;

    public OrderIMiddle(Order_goods order_goods, String status) {
        this.order_goods = order_goods;
        order_goodsList = new ArrayList<Order_goods>();
        order_goodsList.add(order_goods);
        this.status = status;

        imageLoader = ImageLoader.getInstance();
        // 使用DisplayImageOptions.Builder()创建DisplayImageOptions
        options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.publicloading)
                .showImageForEmptyUri(R.drawable.publicloading)
                .showImageOnFail(R.drawable.publicloading)
                .cacheInMemory(true)
                .build();

    }

    @Override
    public int getLayout() {
        return R.layout.listitem_goods;
    }

    @Override
    public boolean isClickable() {
        return true;
    }

    public Order_goods order_goods() {
        return order_goods;
    }

    @Override
    public View getView(final Context context, View convertView, LayoutInflater inflater) {

        inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(getLayout(), null);

        GImageView mImage = (GImageView) convertView.findViewById(R.id.iv_goods_image1);
        GTextView goods_info = (GTextView) convertView.findViewById(R.id.tv_goods_info1);
        GTextView goods_attribute = (GTextView) convertView.findViewById(R.id.tv_goods_attribute1);
        GTextView goods_num = (GTextView) convertView.findViewById(R.id.tv_goods_num1);
        GTextView goods_price = (GTextView) convertView.findViewById(R.id.tv_goods_price1);


        goods_info.setText(order_goods.getGoods_name());
        goods_attribute.setText(order_goods.getSpecification());
        goods_num.setText("x" + order_goods.getQuantity());
        goods_price.setText("¥:" + order_goods.getPrice());
       Log.i("TAG", "order_goods.getOrder_id()=" + order_goods.getOrder_id());


        imageLoader.init(FileUtils.getCache(context));

        imageLoader.displayImage(order_goods.getGoods_image(), mImage, options);

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (status) {
                    case "40":
                        Intent intent = new Intent(context, Message_Logistics.class);
                        intent.putExtra("order_id", order_goods.getOrder_id());
                        context.startActivity(intent);
                        break;
                    case "30":
                        Intent intent2 = new Intent(context, Message_Logistics.class);
                        intent2.putExtra("order_id", order_goods.getOrder_id());
                        context.startActivity(intent2);
                        break;
                    case "20":
                        Intent intent3 = new Intent(context, Message_Delivery.class);
                        intent3.putExtra("order_id", order_goods.getOrder_id());
                        context.startActivity(intent3);
                        break;
                    default:
                        break;
                }

            }
        });

        return convertView;
    }

}

底部:

public class OrderBottom implements OrderContent {

    private Order order;

    private OnceSendView2 shopImageView;
    private List<Order_goods> list;
    private ACache aCache;

    public OrderBottom(Order order, List<Order_goods> list) {

        this.order = order;
        this.list = list;
    }

    @Override
    public int getLayout() {
        return R.layout.item_list_list;
    }

    @Override
    public boolean isClickable() {
        return true;
    }

    public Order order() {
        return order;
    }

    @Override
    public View getView(final Context context, View convertView, LayoutInflater inflater) {
        aCache = ACache.get(context);
        inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(getLayout(), null);

        GTextView orderTotal = (GTextView) convertView.findViewById(R.id.tv_order_amount1);
        GTextView tv_order_datetime = (GTextView) convertView.findViewById(R.id.tv_order_datetime);
        final GButton oncesend = (GButton) convertView.findViewById(R.id.btn_send1);
        GTextView yunfei_text = (GTextView) convertView.findViewById(R.id.yunfei_text);

        yunfei_text.setText("(含运费: ¥ "+order.getShipping_fee()+")");

        orderTotal.setText(order.getOrder_amount());
        tv_order_datetime.setText(Data_Time.getDateToString(order.getAdd_time()));
        final View finalConvertView = convertView;
        if (order.getStatus().equals("20")) {
            oncesend.setText("立即发货");


            oncesend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Intent otherintent = new Intent(context, Message_Delivery.class);
                    otherintent.putExtra("order_id", order.getOrder_id());
                    otherintent.putExtra("token", aCache.getAsString("token"));
                    context.startActivity(otherintent);
                }
            });
        } else if (order.getStatus().equals("30")){
            oncesend.setBackgroundResource(R.color.highlight_color);
            oncesend.setText("查看物流");
            oncesend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(context, Message_Logistics.class);
                    intent.putExtra("order_id", order.getOrder_id());
                    context.startActivity(intent);
                }
            });

        }
        else
        {
            oncesend.setVisibility(View.GONE);

        }

        return convertView;
    }


}

接收接口返回的数据,然后利用for循环将数据循环读入到上中下三个布局中

//解析后台返回的数据
        Type tp = new TypeToken<OrderItems>() {
        }.getType();
        OrderItems goodsItem = (OrderItems) ParseUtils.Gson2Object(s, tp);
        List<OrderItems> orderItems = new ArrayList<OrderItems>();

        orderItems.add(goodsItem);
        List<OrderContent> orderContents;
        List<Order> orderList = new ArrayList<Order>();

        if (goodsItem.getData() != null) {
            orderList = goodsItem.getData().getOrders();
            orderContents = new ArrayList<OrderContent>();
            List<Order_goods> orderGoodses = new ArrayList<Order_goods>();
            int totalPages = goodsItem.getData().getPage().getPage_count();

            //外部第一个循环,将数据循环读取后存到订单顶部
            for (int k = 0; k < orderList.size(); k++) {
                orderGoodses = orderList.get(k).getOrder_goods();
                Order ordertop = new Order();
                ordertop.setOrder_sn(orderList.get(k).getOrder_sn());
                ordertop.setStatus(orderList.get(k).getStatus());
                ordertop.setEvaluation_status(orderList.get(k).getEvaluation_status());
                ItemOrderTop itemOrderTop = new ItemOrderTop(ordertop, orderGoodses);
                orderContents.add(itemOrderTop);

                if (orderGoodses == null) {
                    BaseUtil.showToast(context, "没有订单");
                } else {
                    //中间for循环,将数据循环读取后存到订单中间部分
                    for (int j = 0; j < orderGoodses.size(); j++) {
                        Order_goods goods = new Order_goods();
                        goods.setPrice(orderGoodses.get(j).getPrice());
                        goods.setGoods_name(orderGoodses.get(j).getGoods_name());
                        goods.setQuantity(orderGoodses.get(j).getQuantity());
                        goods.setGoods_image(orderGoodses.get(j).getGoods_image());
                        goods.setSpecification(orderGoodses.get(j).getSpecification());
                        goods.setOrder_id(orderGoodses.get(j).getOrder_id());
                        OrderIMiddle orderIMiddle = new OrderIMiddle(goods,      orderList.get(k).getStatus());
                        orderContents.add(orderIMiddle);
                        Log.i("myLog", "orderContents =" + orderContents);
                    }
                }
                //外部第二个循环,将数据循环读取后存到订单底部
                Order order = new Order();
                order.setOrder_sn(orderList.get(k).getOrder_sn());
                order.setOrder_id(orderList.get(k).getOrder_id());
                order.setStatus(orderList.get(k).getStatus());
                order.setAdd_time(orderList.get(k).getAdd_time());
                order.setOrder_amount(orderList.get(k).getOrder_amount());
                order.setShipping_fee(orderList.get(k).getShipping_fee());
                OrderBottom orderBottom = new OrderBottom(order, orderGoodses);
                orderContents.add(orderBottom);

            }
            mUpdateListview(orderContents, mOrderAdapter, mListView, page, totalPages);

        } else {
            BaseUtil.showToast(context, "没有订单");
        }
    }

然后利用setAdapter方法将数据传到Adapter中。
以下是Adapter的实现方法

public class OrderParentListAdapter extends BaseAdapter {

    private Context context;
    private List<OrderContent> orderContents;
    private LayoutInflater mIflater;

    public OrderParentListAdapter(Context context, List<OrderContent> orderContents) {
        this.context = context;
        if(orderContents!=null)
        {
            this.orderContents = orderContents;

        }
        else
        {
            this.orderContents  =new ArrayList<OrderContent>();

        }

    }

    @Override
    public int getCount() {
        return orderContents.size();
    }

    @Override
    public Object getItem(int position) {
        return orderContents.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean isEnabled(int position) {
        // TODO Auto-generated method stub
        return orderContents.get(position).isClickable();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return orderContents.get(position).getView(context,convertView,mIflater);
    }

    public void upateList(List<OrderContent> orderContents) {
        // TODO Auto-generated method stub
        this.orderContents.addAll(orderContents);
        this.notifyDataSetChanged();
    }

    public void clearListView() {
        // TODO Auto-generated method stub
        this.orderContents.clear();
    }

}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值