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