안 드 로 이 드 모방 타 오 바 오 주문 페이지 효과
주로 주문 페이지 의 실현 에 대해 말씀 드 리 겠 습 니 다.물론 실현 하 는 방법 은 여러 가지 가 있 습 니 다.제 가 아 는 두 가지 방법 이 있 습 니 다.하 나 는 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();
}
}
마지막 으로 이 방법 을 사용 하려 면 인터페이스 와 데이터 반환 형식 을 잘 소통 해 야 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.