android_RecyclerView实现多种item布局

先来个效果图

android_RecyclerView实现多种item布局_第1张图片

1.页面布局就一个recyclerview(想使用recyclerView 需要添加design包

android_RecyclerView实现多种item布局_第2张图片

2.实体类

实体类不用多说一共有三个

第一个是banner的实体类

第二个是菜单选项的实体类

第三个是新闻列表的实体类

简单写一个

android_RecyclerView实现多种item布局_第3张图片

3.MainActivity

//找到recyclerView控件
RecyclerView recyclerView=findViewById(R.id.recyc);
//给recyclerView设置布局管理器
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);

上面不必多说

看一下数据源  因为有三组数据  所以创建三个list

//设置轮播图数据源
List imageList=new ArrayList<>();
imageList.add(new Image("标题1",R.drawable.a));
imageList.add(new Image("标题2",R.drawable.b));
imageList.add(new Image("标题3",R.drawable.c));
imageList.add(new Image("标题4",R.drawable.d));
imageList.add(new Image("标题4",R.drawable.e));
//设置一些icon的选项数据源
List iconList=new ArrayList<>();
iconList.add(new Icon("icon1",R.drawable.a));
iconList.add(new Icon("icon2",R.drawable.b));
iconList.add(new Icon("icon3",R.drawable.c));
iconList.add(new Icon("icon4",R.drawable.d));
iconList.add(new Icon("icon5",R.drawable.e));
iconList.add(new Icon("icon5",R.mipmap.ic_launcher));
//设置新闻的数据源
List newsList=new ArrayList<>();
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));
newsList.add(new News("title","content","2019.8.20"));

上面就是三组数据源

之后统一管理一下这三个数据源

那就再创建一个lsit吧

List listData=new ArrayList<>();
listData.add(imageList);
listData.add(iconList);
listData.add(newsList);

最后把数据源添加到适配器中让recyclerview加载这个适配器

recyclerView.setAdapter(new MyAdapter(listData));

4.adapter

我们采用viewholder与adapter分离这种形式

android_RecyclerView实现多种item布局_第4张图片

看一下构造方法 其实也没啥就创建对象初始化数据的作用

这个类的属性中主要有三个用于区别这三个部分的标识

android_RecyclerView实现多种item布局_第5张图片

当我们加载banner的时候position为0    通过instanceof关键字判断对象是否是Image  是就返回image标识

了解一下子adapter的加载顺序

getItemViewType(int position)  
onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i)

其中第二步会把item的布局加载进来  与viewholder关联

第三步会把数据与viewhoder关联

android_RecyclerView实现多种item布局_第6张图片

这步就是加载item的布局的步骤

根据getItemViewType(int position)方法返回来的标识来判断加载哪个布局

然后关联viewholder

现在看一下viewholder与item

android_RecyclerView实现多种item布局_第7张图片

android_RecyclerView实现多种item布局_第8张图片

其实也没啥

然后看一下onBindViewHolder 注意红色部分就行 区分是哪个viewholder

android_RecyclerView实现多种item布局_第9张图片

android_RecyclerView实现多种item布局_第10张图片

android_RecyclerView实现多种item布局_第11张图片

上面采用的是hongyang的万能适配器  有空可以说一下他的万能适配器是如何实现实现多种item布局 更加简单

最后看一下子item的布局

android_RecyclerView实现多种item布局_第12张图片

采用的约束布局  嵌套非常的少 很干净  我比较喜欢这种布局

 

 

 

 

 

 

你可能感兴趣的:(android_RecyclerView实现多种item布局)