实现RecyclerView按字母排序

public class GoodsManageAdapter extends BaseRecyclerAdapter<GoodsManageAdapter.GoodsManageViewHolder> {

    private List<GoodsManageBean> list;
    private Context context;
    private LayoutInflater inflater;
    private String letter;
    private OnClickListener onClickListener;
    private List<Integer> viewTypeList = new ArrayList<>();

    public GoodsManageAdapter(Context context, List<GoodsManageBean> list) {
        this.context = context;
        this.list = list;
        inflater = LayoutInflater.from(context);
    }
    
    @Override
    public GoodsManageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        GoodsManageViewHolder viewHolder = new GoodsManageViewHolder(inflater.inflate(R.layout.adapter_goods_manage, parent, false));
        viewHolder.ivGoodsManageChange.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickListener.onChangeListener((int) v.getTag());
            }
        });

        viewHolder.ivGoodsManageDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickListener.onDeleteListener((int) v.getTag());
            }
        });


        if (viewType == 1) {
            viewHolder.llTitle.setVisibility(View.VISIBLE);
            viewHolder.tvGoodsManageTopLine.setVisibility(View.GONE);
        } else if (viewType == 2) {

            viewHolder.llTitle.setVisibility(View.VISIBLE);
            viewHolder.tvGoodsManageTopLine.setVisibility(View.VISIBLE);
        } else {
            viewHolder.llTitle.setVisibility(View.GONE);
            viewHolder.tvGoodsManageTopLine.setVisibility(View.GONE);
        }


        return viewHolder;
    }

    @Override

    public int getItemViewType(int position) {
        GoodsManageBean goodsManageBean = list.get(position);
        String firstLetter = String.valueOf(Trans2PinYin.trans2PinYin(goodsManageBean.getGoodsName()).charAt(0)).toUpperCase();

        if (viewTypeList.size() >= position + 1) {
            return viewTypeList.get(position);
        }
        if (position == 0) {
            letter = firstLetter;
            viewTypeList.add(1);
            return 1;
        } else if (!letter.equals(firstLetter)) {
            letter = firstLetter;
            viewTypeList.add(2);
            return 2;
        } else {
            viewTypeList.add(3);
            return 3;
        }

    }

    @Override
    public void onBindViewHolder(GoodsManageViewHolder holder, final int position) {
        holder.ivGoodsManageChange.setTag(position);
        holder.ivGoodsManageDelete.setTag(position);
        GoodsManageBean goodsManageBean = list.get(position);
        String firstLetter = String.valueOf(Trans2PinYin.trans2PinYin(goodsManageBean.getGoodsName()).charAt(0)).toUpperCase();
        holder.tvGoodsManageLetter.setText(firstLetter);
        holder.tvGoodsManageName.setText(goodsManageBean.getGoodsName());

    }

    public void setOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public List<GoodsManageBean> getList() {
        return list;
    }

    public void setList(List<GoodsManageBean> list) {
        viewTypeList.clear();
        this.list = list;
    }

    public void removeData(int position) {
        list.remove(position);
        viewTypeList.clear();
        notifyDataSetChanged();
    }

    class GoodsManageViewHolder extends BaseRecyclerAdapter.BaseViewHolder {
        @BindView(R.id.tv_adapter_goods_manage_letter)
        TextView tvGoodsManageLetter;
        @BindView(R.id.tv_adapter_goods_manage_name)
        TextView tvGoodsManageName;
        @BindView(R.id.tv_adapter_goods_manage_top_line)
        TextView tvGoodsManageTopLine;
        @BindView(R.id.iv_adapter_goods_manage_change)
        ImageView ivGoodsManageChange;
        @BindView(R.id.iv_adapter_goods_manage_delete)
        ImageView ivGoodsManageDelete;
        @BindView(R.id.ll_adapter_goods_manage_title)
        LinearLayout llTitle;

        public GoodsManageViewHolder(View itemView) {
            super(itemView);
        }
    }
}

如图,用一个viewTypeList来保存每个Item的类别(每个类别代表不同的布局)

注意:原始的list必须是排序过的,如下:

Collections.sort(goodsInfoBeen);

转载于:https://my.oschina.net/u/3441261/blog/1800332

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值