先來個效果圖
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
//設置輪播圖數據源 List<Image> 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<Icon> 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<News> 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<List> listData=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的佈局
採用的約束佈局 嵌套非常的少 很乾淨 我比較喜歡這種佈局