RecycleView实现ListView和GridView,用menu菜单分别显示
来源:互联网 发布:手机注册淘宝买家流程 编辑:程序博客网 时间:2024/06/04 19:10
RecycleView实现ListView和GridView的效果显示图:
RecycleView的实现步骤:
1.搭建环境:由于RecycleView是在android5.0之后出来的,用来代替listview,以前的版本能用。需要添加包
选择recycleview-v7包,点击OK;
2.在activity_main布局文件中添加recycleview:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zhiyuan3g.myrecycleviewone.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle_view" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></RelativeLayout>
3.实例化RecycleView控件
public class MainActivity extends AppCompatActivity { private RecyclerView recycle_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 recycle_view = (RecyclerView) findViewById(R.id.recycle_view); } }
4.创建DataBean类,存放Recycle的数据
//创建DataBean类,存放数据public class DataBean { public int Icon; public String name;}
5.RecycleView填充ListView数据
(1)先创建关于ListView适配器MyRecycleAdapter
//RecycleView的适配器,要注意指定的泛型,一般我们就是类名的ViewHolder继承ViewHolder(内部已经实现了复用优化机制)public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.ListViewHolder>{ private Context mContext; //泛型是RecycleView所需的bean类 private List<DataBean>list; //创建构造方法;一个需要接受两个参数,上下文,集合对象(包含了我们所需要的数据) public MyRecycleAdapter(Context context, List<DataBean> list) { mContext = context; this.list = list; } @Override //创建ViewHolder,并把ViewHolder返回出去 public MyRecycleAdapter.ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个View布局,决定了item的样子, 参数:1.上下文 2.Xml布局资源 3.为null View view = View.inflate(mContext, R.layout.item, null); //创建一个ViewHolder对象 ListViewHolder listViewHolder = new ListViewHolder(view); //把VIewHolder对象传出去 return listViewHolder; } @Override //当VIewHolder和数据绑定时回调 public void onBindViewHolder(MyRecycleAdapter.ListViewHolder holder, int position) { //从集合里拿对应item数据对象 DataBean dataBean = list.get(position); //给Holder里面的控件对象设置数据 holder.setData(dataBean); } @Override //决定RecycleView有多少条item public int getItemCount() { if(list!=null&&list.size()>0){ return list.size(); } return 0; } public class ListViewHolder extends RecyclerView.ViewHolder { private final ImageView mImageView; private final TextView mTextView; public ListViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.item_iv_icon); mTextView = (TextView) itemView.findViewById(R.id.item_tv_name); } public void setData(DataBean data) { //给ImageView设置图片数据 mImageView.setImageResource(data.Icon); //给TextView设置文本数据 mTextView.setText(data.name); } }}
(2)创建MyRecycleAdapter适配器时,需要item布局,创建item布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/item_iv_icon" android:layout_width="75dp" android:layout_height="75dp"/> <TextView android:layout_toRightOf="@+id/item_iv_icon" android:layout_centerVertical="true" android:id="@+id/item_tv_name" android:textSize="30sp" android:layout_width="wrap_content" android:layout_height="wrap_content"/></RelativeLayout>
(3)实现ListView的显示,创建LoadListData(Boolean inversion,Boolean orientation)方法;
private void LoadData(Boolean inversion,Boolean orientation){ //集合对象 ArrayList<DataBean>list = new ArrayList(); //给Bean类放数据,最后把装好数据的Bean类放到集合里 for(int i=0;i<35;i++){ //创建dataBean类对象, DataBean dataBean = new DataBean(); dataBean.Icon =R.drawable.jwss_img; dataBean.name = "嘉文四世"+i; //把dataBean类放入集合里 list.add(dataBean); }//创建适配器Adapter对象 参数:1.上下文2.数据加载集合 MyRecycleAdapter adapter = new MyRecycleAdapter(this,list); //设置适配器 recycle_view.setAdapter(adapter); //布局管理器所需参数, 上下文 LinearLayoutManager linearLayoutManager= new LinearLayoutManager(this); //B.通过布局管理器,可以控制条目排列的顺序, true反向,false正常显示 linearLayoutManager.setReverseLayout(inversion); //C.shezhi RecycleView显示的方向是水平和垂直(默认) linearLayoutManager.setOrientation(orientation?LinearLayoutManager.VERTICAL:LinearLayoutManager.HORIZONTAL); //设置布局管理器,参数linearLayoutManager对象 recycle_view.setLayoutManager(linearLayoutManager);}
(4)创建GridView适配器MyRecycleGridAdapter
//提示:MyRecycleAdapter和MyRecycleGridAdapter的代码是一样的//RecycleView的适配器,要注意指定的泛型,一般我们就是类名的ViewHolder继承ViewHolder(内部已经实现了复用优化机制)public class MyRecycleGridAdapter extends RecyclerView.Adapter<MyRecycleGridAdapter.GridVieWHolder>{ private Context mContext; //泛型是RecycleView所需的bean类 private List<DataBean>list; public MyRecycleGridAdapter(Context context, List<DataBean> list) { mContext = context; this.list = list; } @Override //创建ViewHolder,并把ViewHolder返回出去 public MyRecycleGridAdapter.GridVieWHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个View布局,决定了item的样子, 参数:1.上下文 2.Xml布局资源 3.为null View view = View.inflate(mContext, R.layout.item_grid, null); //创建一个ViewHolder对象 GridVieWHolder gridVieWHolder = new GridVieWHolder(view); //把VIewHolder对象传出去 return gridVieWHolder; } @Override //当VIewHolder和数据绑定时回调 public void onBindViewHolder(MyRecycleGridAdapter.GridVieWHolder holder, int position) { //从集合里拿对应item数据对象 DataBean dataBean = list.get(position); //给Holder里面的控件对象设置数据 holder.setData(dataBean); } @Override //决定RecycleView有多少条item public int getItemCount() { if(list!=null&&list.size()>0){ return list.size(); } return 0; } public class GridVieWHolder extends RecyclerView.ViewHolder { private final ImageView mIcon; private final TextView mTextView; public GridVieWHolder(View itemView) { super(itemView); mIcon = (ImageView)itemView.findViewById(R.id.item_grid_iv_icon); mTextView = (TextView) itemView.findViewById(R.id.item_grid_tv_name); } public void setData(DataBean data) { //给ImageView设置图片数据 mIcon.setImageResource(data.icon); //给TextView设置文本数据 mTextView.setText(data.name); } }}
(5)创建item_grid布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:src="@drawable/animal01" android:id="@+id/item_grid_iv_icon" android:layout_width="75dp" android:layout_height="75dp"/> <TextView android:layout_toRightOf="@+id/item_iv_icon" android:layout_centerVertical="true" android:id="@+id/item_grid_tv_name" android:textSize="30sp" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
(6)实现GridView的显示,创建GridLoadData(Boolean inversion,Boolean orientation)方法;
private void GridLoadData(Boolean inversion,Boolean orientation) { //集合对象 ArrayList<DataBean> list = new ArrayList<>(); //给Bean类放数据,最后把装好数据的Bean类放到集合里 for(int i=0;i<35;i++){ //创建Bean类对象, DataBean bean = new DataBean(); bean.icon = R.drawable.animal01; bean.name = "dog"+i; //把Bean类放入集合里 list.add(bean); } //创建适配器Adapter对象 参数:1.上下文2.数据加载集合 MyRecycleGridAdapter adapter = new MyRecycleGridAdapter(this,list); //设置适配器 recyclerView.setAdapter(adapter); //布局管理器所需参数, 上下文,和要显示的列数 GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3); //B.通过布局管理器,可以控制条目排列的顺序, true反向,false正常显示 gridLayoutManager.setReverseLayout(inversion); //C.设置 RecycleView显示的方向是水平和垂直(默认) gridLayoutManager.setOrientation(orientation?GridLayoutManager.VERTICAL:GridLayoutManager.HORIZONTAL); //设置布局管理器,参数gridLayoutManager对象 recyclerView.setLayoutManager(gridLayoutManager); }
6.我们需要创建一个Menu菜单来选择显示ListView和GridView的各个样式。在res下创建menu文件夹,创建menu_item布局;
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_list" android:orderInCategory="100" android:title="list显示" app:showAsAction="never" ><!--showAsAction="never"用三个点的形式显示任务栏--> <menu> <item android:id="@+id/action_list_normal" android:orderInCategory="100" android:title="标准" app:showAsAction="never" /> <item android:id="@+id/action_list_reverse" android:orderInCategory="100" android:title="垂直反向" app:showAsAction="never" /> <item android:id="@+id/action_list_horizontal" android:orderInCategory="100" android:title="水平" app:showAsAction="never" /> <item android:id="@+id/action_list_horizontal_reverse" android:orderInCategory="100" android:title="水平反向" app:showAsAction="never" /> </menu> </item> <item android:id="@+id/action_grid" android:orderInCategory="100" android:title="Grid显示" app:showAsAction="never" ><!--showAsAction="never"用三个点的形式显示任务栏--> <menu> <item android:id="@+id/action_grid_normal" android:orderInCategory="100" android:title="标准" app:showAsAction="never" /> <item android:id="@+id/action_grid_reverse" android:orderInCategory="100" android:title="垂直反向" app:showAsAction="never" /> <item android:id="@+id/action_grid_horizontal" android:orderInCategory="100" android:title="水平" app:showAsAction="never" /> <item android:id="@+id/action_grid_horizontal_reverse" android:orderInCategory="100" android:title="水平反向" app:showAsAction="never" /> </menu> </item></menu>
7.创建onCreateOptionsMenu方法和onOptionsItemSelected方法,实现menu菜单的使用
//菜单,RecycleView各种效果的展示 @Override public boolean onCreateOptionsMenu(Menu menu) { //加载布局使用菜单特有方法getMenuInflater。或Inflate对象,参数:1.菜单显示布局2.固定 getMenuInflater().inflate(R.menu.menu_item,menu); return super.onCreateOptionsMenu(menu); } @Override //菜单按钮点击事件的处理 public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); //list标准显示 if(itemId ==R.id.action_list_normal){ LoadData(false,true); return true; }//list垂直显示 else if(itemId ==R.id.action_list_reverse){ LoadData(true,true); }//list水平显示 else if(itemId ==R.id.action_list_horizontal){ LoadData(false,false); }//list水平反向显示 else if(itemId ==R.id.action_list_horizontal_reverse){ LoadData(true,false); } //Grid标准显示 if(itemId ==R.id.action_grid_normal){ GridLoadData(false,true); return true; }//Grid垂直显示 else if(itemId ==R.id.action_grid_reverse){ GridLoadData(true,true); }//Grid水平显示 else if(itemId ==R.id.action_grid_horizontal){ GridLoadData(false,false); }//Grid水平反向显示 else if(itemId ==R.id.action_grid_horizontal_reverse){ GridLoadData(true,false); } return super.onOptionsItemSelected(item); }
MainAcitivity代码:
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recycle_view); } private void LoadListData(Boolean inversion,Boolean orientation) { //集合对象 ArrayList<DataBean> list = new ArrayList<>(); //给Bean类放数据,最后把装好数据的Bean类放到集合里 for(int i=0;i<35;i++){ //创建Bean类对象, DataBean bean = new DataBean(); bean.icon = R.drawable.jwss_img; bean.name = "嘉文四世"+i; //把Bean类放入集合里 list.add(bean); } //创建适配器Adapter对象 参数:1.上下文2.数据加载集合 MyRecycleAdapter adapter = new MyRecycleAdapter(this,list); //设置适配器 recyclerView.setAdapter(adapter); //布局管理器所需参数, 上下文 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //B.通过布局管理器,可以控制条目排列的顺序, true反向,false正常显示 linearLayoutManager.setReverseLayout(inversion); //C.设置 RecycleView显示的方向是水平和垂直(默认) linearLayoutManager.setOrientation(orientation?LinearLayoutManager.VERTICAL:LinearLayoutManager.HORIZONTAL); //设置布局管理器,参数linearLayoutManager对象 recyclerView.setLayoutManager(linearLayoutManager); } private void GridLoadData(Boolean inversion,Boolean orientation) { //集合对象 ArrayList<DataBean> list = new ArrayList<>(); //给Bean类放数据,最后把装好数据的Bean类放到集合里 for(int i=0;i<35;i++){ //创建Bean类对象, DataBean bean = new DataBean(); bean.icon = R.drawable.jwss_img; bean.name = "嘉文四世"+i; //把Bean类放入集合里 list.add(bean); } //创建适配器Adapter对象 参数:1.上下文2.数据加载集合 MyRecycleGridAdapter adapter = new MyRecycleGridAdapter(this,list); //设置适配器 recyclerView.setAdapter(adapter); //布局管理器所需参数, 上下文,和要显示的列数 GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3); //B.通过布局管理器,可以控制条目排列的顺序, true反向,false正常显示 gridLayoutManager.setReverseLayout(inversion); //C.设置 RecycleView显示的方向是水平和垂直(默认) gridLayoutManager.setOrientation(orientation?GridLayoutManager.VERTICAL:GridLayoutManager.HORIZONTAL); //设置布局管理器,参数gridLayoutManager对象 recyclerView.setLayoutManager(gridLayoutManager); } //菜单,RecycleView各种效果的展示 //加载一个菜单的布局 @Override public boolean onCreateOptionsMenu(Menu menu) { //加载布局使用菜单特有方法getMenuInflater。或Inflate对象,参数:1.菜单显示的不就 2.固定menu getMenuInflater().inflate(R.menu.menu_main,menu); return true; } //菜单按钮点击事件的处理 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); //list标准显示 if(itemId==R.id.action_list_normal){ LoadListData(false,true); return true; }//list垂直显示 else if(itemId==R.id.action_list_reverse){ LoadListData(true,true); }//list水平显示 else if(itemId==R.id.action_list_horizontal){ LoadListData(false,false); }//list水平反向显示 else if(itemId==R.id.action_grid_horizontal_reverse){ LoadListData(true,false); }//Grid标准显示 if(itemId ==R.id.action_grid_normal){ GridLoadData(false,true); return true; }//Grid垂直显示 else if(itemId ==R.id.action_grid_reverse){ GridLoadData(true,true); }//Grid水平显示 else if(itemId ==R.id.action_grid_horizontal){ GridLoadData(false,false); }//Grid水平反向显示 else if(itemId ==R.id.action_grid_horizontal_reverse){ GridLoadData(true,false); } return super.onOptionsItemSelected(item); }}
0 0
- RecycleView实现ListView和GridView,用menu菜单分别显示
- RecycleView嵌套ListView和gridView不显示的问题解决
- 替换ListView和GridView的RecycleView
- Android 用ListView实现GridView分列显示
- Android5.x:RecycleView(一):实现ListView + GridView + StaggeredGridLayou效果
- recycleview实现gridview功能
- 实现ListView分别显示奇偶数
- ListView继续学习 长按显示菜单menu
- 分别用自定义PopupWindow和自定义Dialog实现下拉菜单
- 实现鼠标悬停高亮显示---分别在gridview和datagrid中
- 实现鼠标悬停高亮显示---分别在gridview和datagrid中
- 用ListView实现GridView
- ListView和RecycleView比较
- ListView和RecycleView
- Scrollview嵌套Listview、GridView、RecycleView时只能显示一行或者自动滚动到底部
- 当可以滑动控件如listView,recycleView等嵌套可以滑动的控件如listView,gridView,recycleView 时就会出现里面的控件显示不全的问题
- Menu菜单的实现
- 实现二级Menu菜单
- JQuery总结
- 运维必须掌握的27道Linux面试题
- 区块链应用开发入门
- java 客户端链接不上redis解决方案
- Linux文件系统的目录结构
- RecycleView实现ListView和GridView,用menu菜单分别显示
- 创建型模式之单例模式
- GIT使用笔记
- Android水平刷新控件-HorizontalRefreshLayout
- 整数中1出现的次数
- 数字证书及CA的详细理解
- cnpm
- Activiti排他网关
- CIM导论第二章信息与信息技术笔记