最近再写一些商品订单,我们知道商品订单大概有有着这样的展现形式:
recyclerview.png我们对于这个视图的展示选择的当然选择listview,但是我们发现订单的头部信息和中间的订单信息以及底部的信息三个item完全不同,这样该怎么办?
我这边自己想出了两种方案:
1. 将listview和listview或recyclerView进行嵌套使用
2. 利用recyclerview的viewType这个参数
我们在新建recyclerview适配器的时候在
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){}
这个方法中有viewType这个参数,但是如果你紧紧是将recyclerview展示简单的一致的数据时这个参数你是使用不到的。
在适配器方法的重写时我们可发现存在这样的一个方法 public int getItemViewType(int position)
这个方法就是针对我们这个viewType这个参数进行设置的 ,我们的订单大致分为了三个item,于是我们可以设置为
@Override
public int getItemViewType(int position) {
switch (mlist.get(position).getType()){
case "1":
return TOP;
case "2":
return ITEM;
case "3":
return BOTTOM;
default:
return 0;
}
}
接下来我们在onCreateViewHolder 方法中进行判断
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof TopViewHolder){
((TopViewHolder) holder).tv_orderid.setText(mlist.get(position).getOrd_time());
}else if(holder instanceof ItemViewHolder){
((ItemViewHolder) holder).tv_proname.setText(mlist.get(position).getOrd_name());
((ItemViewHolder) holder).tv_price.setText(mlist.get(position).getPro_price());
((ItemViewHolder) holder).tv_buy_num.setText("X"+mlist.get(position).getOrd_num());
((ItemViewHolder) holder).tv_discount_price.setText(GetTel.getFloat(Float.parseFloat(mlist.get(position).getPro_price())*Float.parseFloat(mlist.get(position).getPro_discount()))+"");
((ItemViewHolder) holder).tv_color_size.setText(mlist.get(position).getOrd_color()+","+mlist.get(position).getOrd_size());
}else if(holder instanceof BottomViewHolder){
((BottomViewHolder) holder).tv_summoney.setText("总计:¥"+mlist.get(position).getOrd_money());
}
}
三个ViewHolder自己根据需求将所需的控件添加即可比如TopViewHolder
private class TopViewHolder extends RecyclerView.ViewHolder {
TextView tv_orderid;
public TopViewHolder(View view) {
super(view);
tv_orderid = (TextView) view.findViewById(R.id.tv_orderid);
}
}
当然最后我们可以看见mlist这个list包含的参数很多,你需要什么就构建什么构造器传值就行。
这样我们就完成了订单的编写了。
网友评论