android_RecyclerView實現多種item佈局

先來個效果圖

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的佈局

採用的約束佈局  嵌套非常的少 很乾淨  我比較喜歡這種佈局

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章