今天,我们用RecyclerView来实现以下效果
image实现过程:
1.你需要用到的文件
(1)MainActivity与activity_main.xml
(2)item_menu.xml:菜单项布局文件
(3)DataUtil.java:工具类,添加获取菜单数据的静态方法
(4)Menu.java:菜单实体类,存放菜单的信息
(5)MenuAdapter.java:
继承RecyclerView.Adapter,用作RecyclerView的适配器
(6)MenuViewHolder.java:
与MenuAdapter.java处于同一个.java文件,继承RecyclerView.ViewHolder,用于关联layout文件
2.activity_main.xml要实现的效果:添加一个RecyclerView即可
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview_main_menu"
android:layout_width="match_parent"
android:layout_height="62dp">
</androidx.recyclerview.widget.RecyclerView>
提示:记得要导入依赖:
implementation 'androidx.recyclerview:recyclerview:1.1.0'
3.MainActivity:添加成员变量菜单视图RecyclerView mRecyclerViewMenu,菜单图标int[] menuIcons,菜单字符串String [] menus。(这里我把menus的值写在了strings.xml里了,推荐此编码习惯)
4.item_menu.xml要实现的效果:实现一个菜单的效果其中即可,如图
image5.Menu.java:添加两个成员变量int icon和String menuName,添加带参构造方法
public Menu(int icon, String menuName) {
this.icon = icon;
this.menuName = menuName;
}
6.DataUtil.java:添加获取菜单数据的静态方法
public static List<Menu> getMainMenus(int icons[],String names[]){
List<Menu> menus=new ArrayList<>();
for (int index = 0; index < icons.length; index++) {
Menu menu=new Menu(icons[index],names[index]);
menus.add(menu);
}
return menus;
}
注意:这里的Menu不是android.view.Menu,不要引入错了
7.MenuViewHolder.java:
与MenuAdapter.java处于同一个.java文件,继承RecyclerView.ViewHolder类。
添加成员变量ImageView mImgMenuIcon和TextView mTxtMenuName,添加构造方法,如下:
public MenuViewHolder(View itemView) {
super(itemView);
mImgMenuIcon=itemView.findViewById(R.id.img_menu_icon);
mTxtMenuName =itemView.findViewById(R.id.txt_menu_name);
}
8.MenuAdapter.java:
继承RecyclerView.Adapter,添加成员变量Context context和List<Menu> menus,添加带参构造方法。
(1)重写onCreateViewHolder方法,返回一个由item_menu.xml反向生成的视图。
return new MenuViewHolder(LayoutInflater.from(context).inflate(R.layout.item_menu, null));
(2)重写getItemCount方法,返回菜单项的数量(注意判空)
return null != menus ? menus.size() : 0;
(3)重写onBindViewHolder方法,
对MenuViewHolder的成员变量mImgMenuIcon和mTxtMenuName进行设置。
Menu menu=menus.get(position);
holder.mImgMenuIcon.setImageResource(menu.icon);
holder.mTxtMenuName.setText(menu.menuName);
9. MainActivity:
在onCreate方法中初始化menus字符串,绑定mRecyclerViewMenu。
给mRecyclerViewMenu设置布局管理器,创建适配器,给mRecyclerViewMenu设置适配器。
menus=getResources().getStringArray(R.array.main_menu);
mRecyclerViewMenu = findViewById(R.id.recyclerview_main_menu);
mRecyclerViewMenu.setLayoutManager (new GridLayoutManager(this,4));
MenuAdapter menuAdapter= new MenuAdapter(this,DataUtil.getMainMenus(menuIcons,menus));
mRecyclerViewMenu.setAdapter(menuAdapter);
The end !
网友评论