RecyclerView 展示同日期下的数据信息

本文介绍了一种使用RecyclerView实现按日期分组展示数据的方法。通过自定义适配器及ViewHolder,实现了不同日期间的分隔,并提供了点击和长按事件处理。代码示例包括GroupItemHolder、NormalItemHolder和DemoAdapter等关键组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下载地址:http://download.csdn.net/detail/wu996489865/9644103

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴唐人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值