RecyclerView(BRVAH)+接口回调多条目展示

//RecyclerView多条目(简单版)

1.

implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'

2.父布局



3.两个子布局






//第二个布局







3.在bean类中实现方法

//这里实现方法
public class CommodityList implements MultiItemEntity {
private int commodityId;

private String commodityName;

private String masterPic;

private int price;

private int saleNum;
//定义两个int类型的值,用于多布局
public static final int TEXT = 0;
public static final int IMG = 1;
private int itemType = 0;
//给itemType 一个构造方法
public CommodityList(int itemType) {
    this.itemType = itemType;
}
//这个方法是实现完MultiItemEntity后,得到的
@Override
public int getItemType() {
	//这是算法
    int i = getCommodityName().length()%2;
    //Log.e("ramder", "getItemType: "+i+"     "+getCommodityName().length()+"" );
    itemType = i;
    //return回去
    return itemType;
}
}
public void setCommodityId(int commodityId){
    this.commodityId = commodityId;
}
public int getCommodityId(){
    return this.commodityId;
}
public void setCommodityName(String commodityName){
    this.commodityName = commodityName;
}
public String getCommodityName(){
    return this.commodityName;
}
public void setMasterPic(String masterPic){
    this.masterPic = masterPic;
}
public String getMasterPic(){
    return this.masterPic;
}
public void setPrice(int price){
    this.price = price;
}
public int getPrice(){
    return this.price;
}
public void setSaleNum(int saleNum){
    this.saleNum = saleNum;
}
public int getSaleNum(){
    return this.saleNum;
}

//4.Activity中不变,设置适配器时不喘布局

//5.适配器

public class MyAdapter extends BaseMultiItemQuickAdapter {

public MyAdapter(List data) {
    super(data);
    addItemType(CommodityList.TEXT, R.layout.list_zi);
    addItemType(CommodityList.IMG, R.layout.list_zi_two);
}

@Override
protected void convert(BaseViewHolder helper, CommodityList item) {
    switch (helper.getItemViewType()){

        case 0:
            Glide.with(mContext).load(item.getMasterPic()).into((ImageView) helper.getView(R.id.c_iv));
            helper.setText(R.id.c_tv,item.getCommodityName());
            break;
        case 1:
            Glide.with(mContext).load(item.getMasterPic()).into((ImageView) helper.getView(R.id.c_iv_two));
            helper.setText(R.id.c_tv_two,item.getCommodityName());
            break;
    }

}
}

//RecyclerView接口回调多条目的方法
1.

implementation 'com.hyman:flowlayout-lib:1.1.2'
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'

2.布局



    
    

2.1:子布局(两个)













3.解析数据,设置适配器,接口删除条目,showXrlv为自己的控件名

		//OK中传过来解析数据
		Gson gson=new Gson();
        String string = response.body().toString();
        ShowBean showBean = gson.fromJson(string, ShowBean.class);
        //得到集合
        final List data = showBean.getData();
        LinearLayoutManager layoutManager =new LinearLayoutManager(ShowActivity.this,LinearLayoutManager.VERTICAL,false);
        showXrlv.setLayoutManager(layoutManager);
        final MyXrAdapter adapter=new MyXrAdapter(ShowActivity.this,data);
        showXrlv.setAdapter(adapter);
        //点击删除条目(接口回调)
        adapter.setOnCallBack(new MyXrAdapter.OnCallBack() {
            @Override
            public void OndeleteCallBack(View v, int position) {
                data.remove(position);
                adapter.notifyDataSetChanged();
            }
        });

4.适配器中

//继承RecyclerView.Adapter
public class MyXrAdapter extends RecyclerView.Adapter {
//定义上下文对象,写集合
Context context;
List data;

public MyXrAdapter(Context context, List data) {
    this.context = context;
    this.data = data;
}
//将下面的接口拿上来
OnCallBack onCallBack;

//给一个set方法
public void setOnCallBack(OnCallBack onCallBack) {
    this.onCallBack = onCallBack;
}

//自己重写一个方法,写出自己要得到几个条目
 @Override
public int getItemViewType(int position) {
    if (position % 2 == 0){
        return 0;
    }else {
        return 1;
    }
}

//得到集合的长度
@Override
public int getItemCount() {
    return data.size();
}

//在这个重写方法中得到布局
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    int itemViewType = getItemViewType(i);
    RecyclerView.ViewHolder holder = null;
    switch (itemViewType) {
        case 0:
            View xview = LayoutInflater.from(context).inflate(R.layout.list_x, null);
            holder = new OneViewHoder(xview);
            break;
        case 1:
            View yview = LayoutInflater.from(context).inflate(R.layout.list_y, null);
            holder = new TwoViewHoder(yview);
            break;
    }
    return holder;
}
public class OneViewHoder extends RecyclerView.ViewHolder {
    @BindView(R.id.id_img)
    ImageView idImg;
    @BindView(R.id.id_text)
    TextView idText;

    public OneViewHoder(@NonNull View itemView) {
        super(itemView);
        ButterKnife.bind(this,itemView);
    }
}

//这是上面的方法得到的,一定变成public,用此方法来找id
public class TwoViewHoder extends RecyclerView.ViewHolder {
    @BindView(R.id.idy_imgg)
    ImageView idyImgg;
    @BindView(R.id.idy_img)
    ImageView idyImg;
    @BindView(R.id.idy_text)
    TextView idyText;
    //删掉原得到的方法,重新得到
    public TwoViewHoder(@NonNull View itemView) {
        super(itemView);
        //!!!!切记,在外部类中加上ButterKnife方法
        ButterKnife.bind(this,itemView);
    }
}

//在这个方法中得到控件,并赋值
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
    int itemViewType = getItemViewType(i);
    switch (itemViewType){
        case 0:
            OneViewHoder oneViewHoder= (OneViewHoder) viewHolder;
            oneViewHoder.idText.setText(data.get(i).getTitle());
            Glide.with(context).load(data.get(i).getThumbnail_pic_s()).into(oneViewHoder.idImg);
            break;

        case 1:
            TwoViewHoder twoViewHoder= (TwoViewHoder) viewHolder;
            twoViewHoder.idyText.setText(data.get(i).getTitle());
            Glide.with(context).load(data.get(i).getThumbnail_pic_s()).into(twoViewHoder.idyImg);
            Glide.with(context).load(data.get(i).getThumbnail_pic_s02()).into(twoViewHoder.idyImgg);
            break;
    }
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onCallBack.OndeleteCallBack(v,i);
        }
    });
}

//接口回调,用来删除条目
public interface OnCallBack{

    public void OndeleteCallBack(View v,int position);

}
}

5.一个XRecyclerView的刷新方法

showXrlv.setLoadingListener(new XRecyclerView.LoadingListener() {
        @Override
        public void onRefresh() {
            index=1;
            //suibian是我为解析抽取的一个方法
            suibian(index);
            showXrlv.refreshComplete();
        }

        @Override
        public void onLoadMore() {
            index++;
            suibian(index);
            showXrlv.loadMoreComplete();
        }
    });
    suibian(index);
}

你可能感兴趣的:(RecyclerView(BRVAH)+接口回调多条目展示)