RecyclerView 展示同日期下的資料資訊
概述:
最近有一個業務需求,ListView根據日期進行展示,但是ListView還是沒有RecyclerView好用,好處我就不再詳述了,沒用過的可以百度一下,很簡單,很友善!
效果:

主要代碼:
GroupItemHolder.java
public class GroupItemHolder extends NormalItemHolder {
public TextView group_item_time;
public GroupItemHolder(Context context, View itemView, CustomClickListener listener,
CustomItemLongClickListener longClickListener) {
super(context, itemView, listener, longClickListener);
group_item_time = (TextView) itemView.findViewById(R.id.group_item_time);
}
}
NormalItemHolder.java
public class NormalItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public TextView out_trade_no;
public TextView amout;
public TextView payType;
public TextView time;
public TextView today;
public ImageView imageType;
private CustomClickListener listener;
private CustomItemLongClickListener longClickListener;
private Context context;
public NormalItemHolder(Context context, View itemView, CustomClickListener listener,
CustomItemLongClickListener longClickListener) {
super(itemView);
this.context = context;
this.listener = listener;
this.longClickListener = longClickListener;
time = (TextView) itemView.findViewById(R.id.time);
out_trade_no = (TextView) itemView.findViewById(R.id.out_trade_no);
amout = (TextView) itemView.findViewById(R.id.amout);
today = (TextView) itemView.findViewById(R.id.today);
payType = (TextView) itemView.findViewById(R.id.payType);
imageType= (ImageView) itemView.findViewById(R.id.imageType);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
if (listener != null) {
itemView.setBackgroundResource(R.drawable.recycler_bg);
listener.setClickListtener(v, getAdapterPosition());
}
}
@Override
public boolean onLongClick(View v) {
if (longClickListener != null) {
itemView.setBackgroundResource(R.drawable.recycler_bg);
longClickListener.setItemLongClick(v, getAdapterPosition());
}
return true;
}
}
DemoAdapter
public class DemoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int NORMAL_ITEM = 0;
private static final int GROUP_ITEM = 1;
private Context mContext;
private List<DemoBean> mDataList;
private LayoutInflater mLayoutInflater;
private CustomClickListener listener;
private CustomItemLongClickListener longClickListener;
private LinearLayout linearLayout;
public DemoAdapter(Context mContext, List<DemoBean> mDataList, LinearLayout linearLayout) {
this.mContext = mContext;
this.mDataList = mDataList;
this.linearLayout = linearLayout;
mLayoutInflater = LayoutInflater.from(mContext);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == NORMAL_ITEM) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bill_item_view_item, parent, false);
NormalItemHolder holder = new NormalItemHolder(mContext, itemView, listener, longClickListener);
return holder;
} else if (viewType == GROUP_ITEM) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bill_item_view_list, parent, false);
GroupItemHolder holder = new GroupItemHolder(mContext, itemView, listener, longClickListener);
return holder;
}
return null;//
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
DemoBean entity = mDataList.get(position);
if (null == entity)
return;
if (viewHolder instanceof GroupItemHolder) {
bindGroupItem(entity, (GroupItemHolder) viewHolder);
} else {
NormalItemHolder holder = (NormalItemHolder) viewHolder;
bindNormalItem(entity, holder.out_trade_no, holder.amout, holder.payType, holder.time, holder.today, holder.imageType);
}
}
@Override
public int getItemCount() {
Log.d("mDataList 的長度:", mDataList.size() + "");
// if (mDataList.size() == 0)
// linearLayout.setBackgroundResource(R.mipmap.null_record);
// else
// linearLayout.setBackgroundResource(0);
return mDataList.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
//第一個要顯示時間
if (position == 0)
return GROUP_ITEM;
String currentDate = mDataList.get(position).getTime();
int prevIndex = position - 1;
boolean isDifferent = !mDataList.get(prevIndex).getTime().equals(currentDate);
return isDifferent ? GROUP_ITEM : NORMAL_ITEM;
}
void bindNormalItem(DemoBean entity, TextView out_trade_no, TextView amout, TextView payType, TextView time, TextView today, ImageView imageType) {
out_trade_no.setText(entity.getOuttradeno());
amout.setText("¥" + entity.getMoney());
payType.setText("(" + entity.getPaytype() + ")");
time.setText(entity.getTimeend());
today.setText(entity.getTime());
if (entity.getPaytype().equals("微信支付")) {
imageType.setBackgroundResource(R.mipmap.pay_icon_weixin);
} else if (entity.getPaytype().equals("支付寶支付")) {
imageType.setBackgroundResource(R.mipmap.pay6_normal);
} else if (entity.getPaytype().equals("QQ支付")) {
imageType.setBackgroundResource(R.mipmap.pay_qq_default);
} else {
imageType.setBackgroundResource(R.mipmap.pay_shuffle);
}
}
void bindGroupItem(DemoBean entity, GroupItemHolder holder) {
bindNormalItem(entity, holder.out_trade_no, holder.amout, holder.payType, holder.time, holder.today, holder.imageType);
holder.group_item_time.setText(entity.getTime());
}
public void setClickListener(CustomClickListener clickListener) {
this.listener = clickListener;
}
public void setLongClickListener(CustomItemLongClickListener longClickListener) {
this.longClickListener = longClickListener;
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<DemoBean> mDataList = new ArrayList<DemoBean>();
private DemoAdapter mAdapter;
private List<DemoBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bill_main);
initView();
}
private void initView() {
mDataList = getData();
mAdapter = new DemoAdapter(this, mDataList, null);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(mAdapter);
}
private List<DemoBean> getData() {
for (int i = 0; i < 3; i++) {
DemoBean bean = new DemoBean();
bean.setTimeend("2014-12-12 12:45:60");
bean.setTime("2016-02-02");
bean.setPaytype("微信支付");
bean.setMoney("0.02");
bean.setOuttradeno("P2013123123156");
mDataList.add(bean);
}
for (int i = 0; i < 3; i++) {
DemoBean bean = new DemoBean();
bean.setTimeend("2016-02-06 12:45:60");
bean.setTime("2016-02-06");
bean.setPaytype("支付寶支付");
bean.setMoney("0.04");
bean.setOuttradeno("P2013123123156");
mDataList.add(0, bean);
}
for (int i = 0; i < 3; i++) {
DemoBean bean = new DemoBean();
bean.setTimeend("2016-02-06 12:45:60");
bean.setTime("2016-02-06");
bean.setPaytype("唐人支付");
bean.setMoney("0.04");
bean.setOuttradeno("P2013123123156");
mDataList.add(0, bean);
}
for (int i = 0; i < 3; i++) {
DemoBean bean = new DemoBean();
bean.setTimeend("2016-02-08 12:45:60");
bean.setTime("2016-02-08");
bean.setPaytype("QQ支付");
bean.setMoney("0.04");
bean.setOuttradeno("P2013123123156");
mDataList.add(0, bean);
}
return mDataList;
}
}