先来个效果图
1.页面布局就一个recyclerview(想使用recyclerView 需要添加design包
2.实体类
实体类不用多说一共有三个
第一个是banner的实体类
第二个是菜单选项的实体类
第三个是新闻列表的实体类
简单写一个
3.MainActivity
//找到recyclerView控件 RecyclerView recyclerView=findViewById(R.id.recyc); //给recyclerView设置布局管理器 LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager);
上面不必多说
看一下数据源 因为有三组数据 所以创建三个list
//设置轮播图数据源 ListimageList=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吧
ListlistData=new ArrayList<>(); listData.add(imageList); listData.add(iconList); listData.add(newsList);
最后把数据源添加到适配器中让recyclerview加载这个适配器
recyclerView.setAdapter(new MyAdapter(listData));
4.adapter
我们采用viewholder与adapter分离这种形式
看一下构造方法 其实也没啥就创建对象初始化数据的作用
这个类的属性中主要有三个用于区别这三个部分的标识
当我们加载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关联
这步就是加载item的布局的步骤
根据getItemViewType(int position)方法返回来的标识来判断加载哪个布局
然后关联viewholder
现在看一下viewholder与item
其实也没啥
然后看一下onBindViewHolder 注意红色部分就行 区分是哪个viewholder
上面采用的是hongyang的万能适配器 有空可以说一下他的万能适配器是如何实现实现多种item布局 更加简单
最后看一下子item的布局
采用的约束布局 嵌套非常的少 很干净 我比较喜欢这种布局