【RecyclerView】 九、為 RecyclerView 設置不同的布局樣式

      網友投稿 898 2025-04-02

      文章目錄


      一、為 RecyclerView 設置不同的布局樣式

      二、完整代碼

      三、RecyclerView 相關資料

      一、為 RecyclerView 設置不同的布局樣式

      為 RecyclerView 設置不同的布局樣式流程 :

      自定義 RecyclerView.Adapter 泛型類型 : 適配器的泛型類型需要設置為

      RecyclerView.ViewHolder

      , 這是所有 ViewHolder 的基類 ;

      public class Adapter extends RecyclerView.Adapter

      1

      ② 實現 getItemViewType( ) 方法 : 這里為不同位置的組件設置不同的布局類型 ;

      @Override public int getItemViewType(int position) { // 返回 View 布局類型, 奇數序號組件類型為 VIEW_TYPE_2, 偶數序號組件類型為 VIEW_TYPE_1 return position % 2; }

      1

      2

      3

      4

      5

      ③ 根據布局類型加載不同的布局文件 : 在

      onCreateViewHolder( )

      方法中 , 根據當前的 int viewType 參數 , 加載不同的布局文件 ;

      @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 根據不同的組件類型加載不同類型的布局文件 switch (viewType){ case VIEW_TYPE_1: return new ViewHolder( LayoutInflater.from(MainActivity.this) .inflate(R.layout.item_recyclerview, parent, false) ); case VIEW_TYPE_2: return new ViewHolder2( LayoutInflater.from(MainActivity.this) .inflate(R.layout.item_recyclerview2, parent, false) ); } return null; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      ④ 根據不同的布局類型綁定數據 : 在

      onBindViewHolder( )

      方法中為布局組件綁定數據時 , 可以調用 getItemViewType 方法 , 獲取當前的布局類型 , 然后根據該布局類型 , 將 ViewHolder 參數強轉為不同的子類對象 , 然后為其綁定數據 ;

      @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { // 根據 position 獲取布局類型 , 然后綁定數據 switch (getItemViewType(position)){ case VIEW_TYPE_1: ((ViewHolder)holder).text.setText("" + position); break; case VIEW_TYPE_2: ((ViewHolder2)holder).text.setText("" + position); ((ViewHolder2)holder).image.setImageResource(R.mipmap.ic_launcher); break; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      二、完整代碼

      完整代碼 :

      package kim.hsl.recyclerview; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1 . 從布局中獲取 RecyclerView RecyclerView recycler_view = findViewById(R.id.recycler_view); //2 . 創建并設置布局管理器 //創建布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false); //設置布局管理器 recycler_view.setLayoutManager(layoutManager); // 添加分隔符 recycler_view.addItemDecoration(new ItemDecoration()); //3 . 創建并設置列表適配器 Adapter adapter = new Adapter(); recycler_view.setAdapter(adapter); } /** * RecyclerView 適配器 * RecyclerView.Adapter 中的 ViewHolder 泛型設置為 RecyclerView.ViewHolder * 同理 onBindViewHolder 中的泛型也要是該類型的 */ public class Adapter extends RecyclerView.Adapter { public static final int VIEW_TYPE_1 = 0; public static final int VIEW_TYPE_2 = 1; @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 根據不同的組件類型加載不同類型的布局文件 switch (viewType){ case VIEW_TYPE_1: return new ViewHolder( LayoutInflater.from(MainActivity.this) .inflate(R.layout.item_recyclerview, parent, false) ); case VIEW_TYPE_2: return new ViewHolder2( LayoutInflater.from(MainActivity.this) .inflate(R.layout.item_recyclerview2, parent, false) ); } return null; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { // 根據 position 獲取布局類型 , 然后綁定數據 switch (getItemViewType(position)){ case VIEW_TYPE_1: ((ViewHolder)holder).text.setText("" + position); break; case VIEW_TYPE_2: ((ViewHolder2)holder).text.setText("" + position); ((ViewHolder2)holder).image.setImageResource(R.mipmap.ic_launcher); break; } } @Override public int getItemCount() { return 10; } @Override public int getItemViewType(int position) { // 返回 View 布局類型, 奇數序號組件類型為 VIEW_TYPE_2, 偶數序號組件類型為 VIEW_TYPE_1 return position % 2; } public class ViewHolder extends RecyclerView.ViewHolder { TextView text; public ViewHolder(@NonNull View itemView) { super(itemView); text = itemView.findViewById(R.id.text); } } public class ViewHolder2 extends RecyclerView.ViewHolder { TextView text; ImageView image; public ViewHolder2(@NonNull View itemView) { super(itemView); text = itemView.findViewById(R.id.text); image = itemView.findViewById(R.id.image); } } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      運行結果 :

      三、RecyclerView 相關資料

      官方文檔 :

      【RecyclerView】 九、為 RecyclerView 設置不同的布局樣式

      使用 RecyclerView 創建動態列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview

      高級 RecyclerView 自定義 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom

      代碼示例 :

      GitHub 源碼地址 : https://github.com/han1202012/001_RecyclerView

      博客源碼快照 : https://download.csdn.net/download/han1202012/14956298

      ( 使用 android studio 打開 )

      Android

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel回車換行(excel回車換行設置
      下一篇:Excel2010怎么給漢字標注拼音
      相關文章
      精品亚洲一区二区三区在线播放 | 中文字幕人成人乱码亚洲电影| 国产成人精品日本亚洲专区6| 无码专区—VA亚洲V天堂| 日日噜噜噜噜夜夜爽亚洲精品| 国产精品亚洲一区二区三区久久 | 亚洲乱码一二三四五六区| 亚洲精品视频在线免费| 亚洲精彩视频在线观看| 亚洲日韩乱码久久久久久| 亚洲第一页在线观看| 亚洲一本之道高清乱码| 亚洲一区二区三区播放在线| 亚洲国产成人精品激情| 中文有码亚洲制服av片| 亚洲欧美日韩中文高清www777| 亚洲精品国产综合久久久久紧| 亚洲国产精品无码久久98| 久久无码av亚洲精品色午夜 | 亚洲人成色77777在线观看| 亚洲欧美日韩中文高清www777| 亚洲AV无码一区二区三区性色| 亚洲AV无码国产精品永久一区| 无码天堂va亚洲va在线va| 国产尤物在线视精品在亚洲| 亚洲精品人成无码中文毛片 | 亚洲乱码中文字幕手机在线 | 亚洲香蕉久久一区二区| 亚洲色精品VR一区区三区| 亚洲日韩AV一区二区三区中文| 亚洲高清乱码午夜电影网| 精品久久久久亚洲| 国产成人精品日本亚洲专区| 亚洲熟妇av一区二区三区 | 国产亚洲精品看片在线观看 | 国产精品亚洲自在线播放页码| 亚洲中文字幕无码久久| 处破女第一次亚洲18分钟| 国产国拍亚洲精品福利| 亚洲va久久久噜噜噜久久天堂 | 久久精品国产亚洲AV高清热|