这个是我上一篇关于的补充,上一篇说的详细一点,戳这里
(https://blog.csdn.net/qq_39326574/article/details/98098520)
实现网格视图的关键代码
//定义布局管理器为Grid管理器,设置一行放3个
RecyclerView.LayoutManager layoutManager=new GridLayoutManager(this,3);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);
下面给出所有代码:
三个类,两个布局文件,七张图。
图片链接:https://pan.baidu.com/s/11aZcT4pKdHkSz3DmBV2z7A
提取码:pl6i
public class Friut {
String name;
int imageResourceID;
public Friut(String name, int imageResourceID) {
this.name = name;
this.imageResourceID = imageResourceID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageResourceID() {
return imageResourceID;
}
public void setImageResourceID(int imageResourceID) {
this.imageResourceID = imageResourceID;
}
}
public class MyAdapter extends RecyclerView.Adapter {
ArrayList mFriutArrayList;
public MyAdapter(ArrayList list) {
mFriutArrayList=list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//用来创建ViewHolder实例,再将加载好的布局传入构造函数,最后返回ViewHolder实例
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit,null);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { //用于对RecyclerView的子项进行赋值,会在每个子项滚动到屏幕内的时候执行
holder.iv.setImageResource(mFriutArrayList.get(position).getImageResourceID());
holder.tv.setText(mFriutArrayList.get(position).getName());
}
@Override
public int getItemCount() {
return mFriutArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tv;
ImageView iv;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.tv);
iv=itemView.findViewById(R.id.iv);
}
}
}
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
ArrayList list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView=findViewById(R.id.rv);
initFruit();
//定义布局管理器为Grid管理器,设置一行放3个
RecyclerView.LayoutManager layoutManager=new GridLayoutManager(this,3);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);
MyAdapter adapter=new MyAdapter(list);
mRecyclerView.setAdapter(adapter);
}
private void initFruit() {
for (int i = 0; i <20 ; i++) {
Friut friut=new Friut("苹果",R.mipmap.apple_pic);
list.add(friut);
Friut friut1=new Friut("香蕉",R.mipmap.banana_pic);
list.add(friut1);
Friut friut2=new Friut("樱桃",R.mipmap.cherry_pic);
list.add(friut2);
Friut friut3=new Friut("葡萄",R.mipmap.grape_pic);
list.add(friut3);
Friut friut4=new Friut("橘子",R.mipmap.orange_pic);
list.add(friut4);
Friut friut5=new Friut("梨子",R.mipmap.pear_pic);
list.add(friut5);
Friut friut6=new Friut("西瓜",R.mipmap.watermelon_pic);
list.add(friut6);
}
}
}
更改上面的布局管理器:
//定义布局管理器为StaggeredGridLayoutManager管理器,设置一行放2个,垂直布局
RecyclerView.LayoutManager layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);
更改initFruit()
private void initFruit() {
for (int i = 0; i <20 ; i++) {
Friut friut1=new Friut("香蕉",R.mipmap.bigbanana);
list.add(friut1);
Friut friut=new Friut("苹果",R.mipmap.apple_pic);
list.add(friut);
}
}
效果图
//定义布局管理器为StaggeredGridLayoutManager管理器,设置一行放2个,水平布局
RecyclerView.LayoutManager layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
//给RecyclerView添加布局管理器
mRecyclerView.setLayoutManager(layoutManager);
效果