RecycleView实现ListView和GridView的效果显示图:
RecycleView的实现步骤:
1.搭建环境:由于RecycleView是在android5.0之后出来的,用来代替listview,以前的版本能用。需要添加包
选择recycleview-v7包,点击OK;

2.在activity_main布局文件中添加recycleview:
<RelativeLayoutxmlns: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.RecyclerViewandroid: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;@Overrideprotected 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.为nullView 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有多少条itempublic 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"><ImageViewandroid:id="@+id/item_iv_icon"android:layout_width="75dp"android:layout_height="75dp"/><TextViewandroid: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.为nullView 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有多少条itempublic 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"><ImageViewandroid:src="@drawable/animal01"android:id="@+id/item_grid_iv_icon"android:layout_width="75dp"android:layout_height="75dp"/><TextViewandroid: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><itemandroid:id="@+id/action_list_normal"android:orderInCategory="100"android:title="标准"app:showAsAction="never"/><itemandroid:id="@+id/action_list_reverse"android:orderInCategory="100"android:title="垂直反向"app:showAsAction="never"/><itemandroid:id="@+id/action_list_horizontal"android:orderInCategory="100"android:title="水平"app:showAsAction="never"/><itemandroid: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><itemandroid:id="@+id/action_grid_normal"android:orderInCategory="100"android:title="标准"app:showAsAction="never"/><itemandroid:id="@+id/action_grid_reverse"android:orderInCategory="100"android:title="垂直反向"app:showAsAction="never"/><itemandroid:id="@+id/action_grid_horizontal"android:orderInCategory="100"android:title="水平"app:showAsAction="never"/><itemandroid:id="@+id/action_grid_horizontal_reverse"android:orderInCategory="100"android:title="水平反向"app:showAsAction="never"/></menu></item>
</menu>
7.创建onCreateOptionsMenu方法和onOptionsItemSelected方法,实现menu菜单的使用
 //菜单,RecycleView各种效果的展示@Overridepublic 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;@Overrideprotected 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各种效果的展示//加载一个菜单的布局@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//加载布局使用菜单特有方法getMenuInflater。或Inflate对象,参数:1.菜单显示的不就 2.固定menugetMenuInflater().inflate(R.menu.menu_main,menu);return true;}//菜单按钮点击事件的处理@Overridepublic 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);}
}

RecycleView实现ListView和GridView,用menu菜单分别显示相关推荐

  1. ListView 和 GridView应用详解-----本文转自博客园

    1. 选择 ListView 或 GridView ListView 和 GridView 控件均用于显示应用中数据的集合.它们的功能十分相似,但是显示数据的方式不同.它们都派生自 ItemsCont ...

  2. Menu 菜单的使用

    分类: Options Menu Context Menu PopupMenu 一.Options Menu: 特点以及作用: 当点击Menu键或者标题栏右上方的 图标时,在页面右上方或者页面的底边缘 ...

  3. Menu菜单用法全面讲解

    说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...

  4. [转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更...

    作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/) 版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其 ...

  5. 把ListView和GridView与AppBar实现上下联动

    这是仿照bilibili客户端做得 需要重写ListVIew和GridView,我是仿照系统RecycleView修改的,其实很简单,我直接上代码把.有什么问题请大家指出来,一起学习 package ...

  6. android定制你自己的menu菜单,修改menu字体颜色

    http://bbs.hiapk.com/thread-2581971-1-1.html 原帖来自ligux~~~~傻子啊傻子 如上次教程一样,准备工作是java环境以及反编译工具,还有你从自己ROM ...

  7. Android 控件 之 Menu 菜单

    http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu (选项菜单)用法总结 使用方法: 方法一:添加菜 ...

  8. android中menu菜单扩增_【已解决】Android添加Menu菜单

    [背景] 想要在Android中添加Menu菜单. 目前已经有了menu的xml定义了: /res/menu/activity_main.xml android:id="@+id/menu_ ...

  9. ListView和GridView的一些杂七八杂的内容

    2019独角兽企业重金招聘Python工程师标准>>> 今天加了一天班,算是做编程以来的第一次,也是正式工作以来最心甘情愿的一次,希望能开启勤奋模式,努力学习! 最近公司在做andr ...

最新文章

  1. 【直播回放】150分钟详解模型压缩理论和实践
  2. iOS Assigning to 'idXXXDelegate' from incompatible type 'BViewController *__strong'
  3. 织梦无子栏目时禁止调用同级栏目
  4. android 打印kernel log,android8.0 kernel4.9.44 各层log打开
  5. 诗与远方:无题(五十九)
  6. 大屏实时监控-2019年CSDN博客之星年度总评选(2019-02-07 13:47)
  7. java mongodb 多文档_如何通过Java在MongoDB中一次性插入多个文档
  8. python基础教程博客_python基础教程(十)
  9. Tomcat的下载安装及使用
  10. 2018年第31周-hive支持的Delete和Update的配置
  11. 杀掉移动设备幽灵启动
  12. centos配置epel和remi源
  13. python变量循环写入txt文件_Python中将变量按行写入txt文本中
  14. docker容器安装oracle10g
  15. PRINCE2产品认证报考常见一些问答
  16. python矩阵连乘_python动态规划解决矩阵连乘
  17. 蓝方防守、HW总结报告模板
  18. Matlab中FracLab计算分形维数方法
  19. android 锁屏的生命周期_Activity的生命周期的七个场景
  20. excel文件导出进度条的实现

热门文章

  1. 马尔可夫 java_马尔可夫过程(以马尔科夫链Markov为例)
  2. FTPclient简单使用
  3. 三星显示器服务器网络设置方法,三星显示器也有这样的通病,看完你就知道怎么解决...
  4. Spring面试之循环依赖详解
  5. 构造方法的作用和用法(对于刚接触的学员)
  6. 数字孪生智能造船大型起重机械管理研究案例
  7. 信阳师范学院自动登录校园网
  8. Illumination correction by dehazing for retinal vessel segmentation
  9. BC2.0 以太坊应用技术交流01(不炒币,不传销)
  10. 【合约解读】CryptoPunk 世界上最早的去中心化NFT交易市场