안 드 로 이 드 모방 타 오 바 오 주문 페이지 효과

일반 전자상거래 프로젝트 와 관련 된 주문 관리 모듈,타 오 바 오 스타일 의 주문


주로 주문 페이지 의 실현 에 대해 말씀 드 리 겠 습 니 다.물론 실현 하 는 방법 은 여러 가지 가 있 습 니 다.제 가 아 는 두 가지 방법 이 있 습 니 다.하 나 는 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); 
} 
인터페이스 리 턴 을 이용 하여 각각 세 개의 구 조 를 실현 하 다.
제1 부분

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();
 }

}
마지막 으로 이 방법 을 사용 하려 면 인터페이스 와 데이터 반환 형식 을 잘 소통 해 야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기