一般电商项目会涉及到的订单管理模块,类似淘宝样式的订单
主要是讲一下订单页面的实现。当然实现的方法有很多,我知道的有两种方法:一种是采用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 list;
private ACache aCache;
public ItemOrderTop(Order order, List 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_goodsList;
private String status;
public OrderIMiddle(Order_goods order_goods, String status) {
this.order_goods = order_goods;
order_goodsList = new ArrayList();
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 list;
private ACache aCache;
public OrderBottom(Order order, List 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() { }.getType(); OrderItems goodsItem = (OrderItems) ParseUtils.Gson2Object(s, tp); List orderItems = new ArrayList (); orderItems.add(goodsItem); List orderContents; List orderList = new ArrayList (); if (goodsItem.getData() != null) { orderList = goodsItem.getData().getOrders(); orderContents = new ArrayList (); List orderGoodses = new ArrayList (); 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 orderContents;
private LayoutInflater mIflater;
public OrderParentListAdapter(Context context, List orderContents) {
this.context = context;
if(orderContents!=null)
{
this.orderContents = orderContents;
}
else
{
this.orderContents =new ArrayList();
}
}
@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 orderContents) {
// TODO Auto-generated method stub
this.orderContents.addAll(orderContents);
this.notifyDataSetChanged();
}
public void clearListView() {
// TODO Auto-generated method stub
this.orderContents.clear();
}
}
最后,使用此方法需要和接口沟通好数据返回的格式;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



