【RecyclerView】 十四、GridLayoutManager 网格布局管理器 ( GridLayoutManager.SpanSizeLookup 指定 item 元素占用网格个数 )
文章目錄
- 一、修改單條數(shù)據(jù)
- 二、完整代碼示例
- 三、總體運(yùn)行效果
- 四、RecyclerView 相關(guān)資料
一、修改單條數(shù)據(jù)
GridLayoutManager.SpanSizeLookup 的主要作用是設(shè)置每個 item 元素占據(jù)網(wǎng)格布局的格子數(shù)量 ;
默認(rèn)每個 item 元素占 1 個格子 ;
GridLayoutManager.SpanSizeLookup 使用流程 :
① 自定義類 : 自定義 GridLayoutManager.SpanSizeLookup 子類 , 并實(shí)現(xiàn) public int getSpanSize(int position) 方法 ;
② 設(shè)置占用格子數(shù)目 : 設(shè)置元素在 getSpanSize 方法中 , 設(shè)置每個 position 位置占據(jù)的格子數(shù)量 ;
③ 布局管理器設(shè)置 : 調(diào)用 setSpanSizeLookup 方法 , 將 GridLayoutManager.SpanSizeLookup 子類對象設(shè)置給 GridLayoutManager ;
④ 刷新 UI : 調(diào)用 RecyclerView.Adapter 的 notifyDataSetChanged 方法即可刷新 UI ;
設(shè)置效果一 : 第一個元素占 4 個格子 , 第二個元素占 2 個格子 , 第三個元素占 2 個格子 ;
// 設(shè)置網(wǎng)格每個位置的元素 占用格子個數(shù)layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 第一個元素占 4 個格子if(position == 0){return 4;}// 第二個元素占 2 個格子if(position == 1){return 2;}// 第三個元素占 2 個格子if(position == 2){return 2;}return 1;}});設(shè)置效果二 : 每個元素都占用 2 個格子 ;
new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 每個位置的元素都占用 2 個格子return 2;}}設(shè)置效果三 : 偶數(shù)位置占 1 個格子 , 奇數(shù)位置占 2 個格子 ;
new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {if (position % 2 == 0){// 偶數(shù)位置占 1 個格子return 1;}else if (position % 2 == 1) {// 奇數(shù)位置占 3 個格子return 3;}return 1;}}二、完整代碼示例
package kim.hsl.recyclerview;import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {/*** 數(shù)據(jù)源*/private ArrayList<String> names = new ArrayList<String>();/*** 當(dāng)前的 RecyclerView 列表*/private RecyclerView recycler_view;/*** 網(wǎng)格布局管理器*/private GridLayoutManager layoutManager;/*** 適配器*/private Adapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化數(shù)據(jù)initData();//1 . 從布局中獲取 RecyclerViewrecycler_view = findViewById(R.id.recycler_view);//2 . 創(chuàng)建并設(shè)置布局管理器//創(chuàng)建布局管理器layoutManager = new GridLayoutManager(this,4,RecyclerView.VERTICAL,false);// 設(shè)置網(wǎng)格每個位置的元素 占用格子個數(shù)layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 第一個元素占 4 個格子if(position == 0){return 4;}// 第二個元素占 2 個格子if(position == 1){return 2;}// 第三個元素占 2 個格子if(position == 2){return 2;}return 1;}});//設(shè)置布局管理器recycler_view.setLayoutManager(layoutManager);// 設(shè)置邊距recycler_view.addItemDecoration(new ItemDecoration());//3 . 創(chuàng)建并設(shè)置列表適配器adapter = new Adapter();recycler_view.setAdapter(adapter);// 初始化點(diǎn)擊事件initClick();}/*** 初始化數(shù)據(jù)*/private void initData(){names.add("宋江");names.add("盧俊義");names.add("吳用");names.add("公孫勝");names.add("關(guān)勝");names.add("林沖");names.add("秦明");names.add("呼延灼");names.add("花榮");names.add("柴進(jìn)");names.add("李應(yīng)");names.add("朱仝");names.add("魯智深");names.add("武松");names.add("董平");names.add("張清");names.add("楊志");names.add("徐寧");names.add("索超");}void initClick(){// 模式 1findViewById(R.id.mod_1).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {// 每個位置的元素都占用 2 個格子return 2;}});// 重新刷新布局adapter.notifyDataSetChanged();}});// 模式 2findViewById(R.id.mod_2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 給網(wǎng)格布局管理器設(shè)置新的layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {if (position % 2 == 0){// 偶數(shù)位置占 1 個格子return 1;}else if (position % 2 == 1) {// 奇數(shù)位置占 3 個格子return 3;}return 1;}});// 重新刷新布局adapter.notifyDataSetChanged();}});}/*** RecyclerView 適配器*/public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View root_view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview, parent, false);return new ViewHolder(root_view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.text.setText("" + names.get(position));}@Overridepublic int getItemCount() {return names.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView text;public ViewHolder(@NonNull View itemView) {super(itemView);text = itemView.findViewById(R.id.text);}}}}
三、總體運(yùn)行效果
四、RecyclerView 相關(guān)資料
官方文檔 :
使用 RecyclerView 創(chuàng)建動態(tài)列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview
高級 RecyclerView 自定義 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom
RecyclerView 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView
RecyclerView.Adapter 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.Adapter
RecyclerView.ViewHolder 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder
RecyclerView.ItemDecoration 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ItemDecoration
GridLayoutManager 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/GridLayoutManager
LinearLayoutManager 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/LinearLayoutManager
StaggeredGridLayoutManager 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager
代碼示例 :
GitHub 源碼地址 : https://github.com/han1202012/001_RecyclerView
博客源碼快照 : https://download.csdn.net/download/han1202012/15006329
( 使用 Android Studio 打開 )
總結(jié)
以上是生活随笔為你收集整理的【RecyclerView】 十四、GridLayoutManager 网格布局管理器 ( GridLayoutManager.SpanSizeLookup 指定 item 元素占用网格个数 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【RecyclerView】 十三、Re
- 下一篇: 【RecyclerView】 十五、使用