RecyclerView实现ListView和GridView的效果
来源:互联网 发布:曹云金 知乎 编辑:程序博客网 时间:2024/05/17 04:47
关于RecyclerView的详细创建步骤请见:http://blog.csdn.net/lixiang_y/article/details/61937111
在这里我就不过多的赘述了
下面我们要使用RecyclerView实现ListView和GridView的效果,完整代码及Demo
先看一下效果图:
主要逻辑代码:
RecyclerViewAdapter.java
DataBean.java
在这里我就不过多的赘述了
下面我们要使用RecyclerView实现ListView和GridView的效果,完整代码及Demo
先看一下效果图:
主要逻辑代码:
MainActivity.java
package com.zhiyuan3g.myrecycleview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.Menu;import android.view.MenuItem;import android.widget.GridLayout;import android.widget.Toast;import com.zhiyuan3g.myrecycleview.adapter.RecyclerViewAdapter;import com.zhiyuan3g.myrecycleview.adapter.RecyclerViewGridAdapter;import com.zhiyuan3g.myrecycleview.bean.DataBean;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private RecyclerView recyclerview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //下面代码是菜单,方便效果展示,与recyclerView无关 //加载一个菜单的布局 } @Override public boolean onCreateOptionsMenu(Menu menu) { //加载布局,使用菜单特有方法getMenInfater,或Inflate对象 //参数:1.菜单显示的布局 2.固定menu getMenuInflater().inflate(R.menu.menu_main,menu); return true; } //在每个if条件下填充相应的操作代码 @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.action_list_normal) { //标准显示 loadListData(false,false,"List"); Toast.makeText(getApplicationContext(), "标准显示", Toast.LENGTH_SHORT).show(); return true; } else if (itemId == R.id.action_list_vertical_reverse) { //list:垂直反向显示 loadListData(true,false,"List"); } else if (itemId == R.id.action_list_horizontal) { //水平显示 loadListData(false,true,"List"); } else if (itemId == R.id.action_list_horizontal_reverse) { //水平反向显示 loadListData(true,true,"List"); } else if (itemId == R.id.gridview_normal) { //gridview:标准显示 loadListData(false,false,"GridView"); } else if (itemId == R.id.gridview_reverse) { //垂直反向显示 loadListData(true,false,"GridView"); } else if (itemId == R.id.gridview_horizontal_normal) { //水平标准显示 loadListData(false,true,"GridView"); } else if (itemId == R.id.gridview_horizontal_reserse) { //水平反向显示 loadListData(true,true,"GridView"); } return super.onOptionsItemSelected(item); } //封装listview的代码 添加两个参数 1.控制条目执行顺序, 2.控制条目的布局方向 private void loadListData( boolean inversion,boolean oritation,String what) { //集合对象 ArrayList<DataBean> datas = new ArrayList<>(); //给bean类放数据,最后把封装好的数据的Bean类放到集合里 for (int x=0; x<35 ;x++){ //创建bean对象 DataBean dataBean = new DataBean(); dataBean.icon=R.mipmap.ic_launcher; dataBean.name="CCTV"+x; //把bean类放入集合 datas.add(dataBean); } if (what.equals("List")) { //创建适配器adapter RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this,datas); //设置适配器 recyclerview.setAdapter(recyclerViewAdapter); //布局管理器所需参数,上下文 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置布局管理器 recyclerview.setLayoutManager(linearLayoutManager); //通过布局管理器,可以控制条目排列的顺序, true为反向显示 false为正常显示 linearLayoutManager.setReverseLayout(inversion); //通过布局管理器设置orientation,可以设置为水平和垂直 //添加三元运算符,当true时执行左边的,false时执行右边的,问题与结果之间是用?连接, //结果与结果之间是用 :连接 linearLayoutManager.setOrientation(oritation ?LinearLayoutManager.HORIZONTAL:LinearLayoutManager.VERTICAL); } else if (what.equals("GridView")) { RecyclerViewGridAdapter recyclerViewGridAdapter = new RecyclerViewGridAdapter(this, datas); recyclerview.setAdapter(recyclerViewGridAdapter); //GridLayoutManager参数:1.上下文, 2.显示的列数(column) GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3); recyclerview.setLayoutManager(gridLayoutManager); gridLayoutManager.setReverseLayout(inversion); gridLayoutManager.setOrientation(oritation? GridLayout.HORIZONTAL:GridLayout.VERTICAL); } } private void initView() { recyclerview = (RecyclerView) findViewById(R.id.recyclerview); }}
RecyclerViewAdapter.java
package com.zhiyuan3g.myrecycleview.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.zhiyuan3g.myrecycleview.R;import com.zhiyuan3g.myrecycleview.bean.DataBean;import java.util.List;//RecyclerView的适配器,注意要指定泛型,// 一般我们就是类名的ViewHolder继承ViewHolder(内部已经实现了复用优化机制)public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ListViewHolder> { private Context context; private List<DataBean> databean; //构造方法,一般需要接受两个参数,上下文,集合对象(包含我们的数据) public RecyclerViewAdapter(Context context, List<DataBean> databean) { this.context = context; this.databean = databean; } //创建ViewHolder(相当于item),并把ViewHolder返回出去。 @Override public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个view布局对象,决定item的样子,参数:1.上下文 2.XML布局资源 3.为null View view = View.inflate(context, R.layout.item_list, null); //创建一个ViewHolder对象 ListViewHolder listViewHolder = new ListViewHolder(view); //把创建出来的ViewHolder对象传出去 return listViewHolder; } //当ViewHolder和数据绑定时,回调 @Override public void onBindViewHolder(ListViewHolder holder, int position) { //从集合里拿对应item的数据对象 DataBean dataBean = databean.get(position); //给holder里面的控件对象设置数据 holder.setData(dataBean); } //决定RecyclerView有多少条 @Override public int getItemCount() { //数据不为null,有几条数据就显示几条数据 ??? if (databean != null&& databean.size()>0) { return databean.size(); } return 0; } //自动帮我们写的ViewHolder,参数:view对象 public class ListViewHolder extends RecyclerView.ViewHolder { private final ImageView mIvicon; private final TextView mTvname; public ListViewHolder(View itemView) { super(itemView); mIvicon = (ImageView)itemView.findViewById(R.id.item_list_iv_icon); mTvname = (TextView) itemView.findViewById(R.id.item_list_tv_name); } public void setData(DataBean dataBean) { //给imageview设置图片数据 mIvicon.setImageResource(dataBean.icon); //给TextView设置文本数据 mTvname.setText(dataBean.name); } }}
RecyclerViewGridAdapter.java
package com.zhiyuan3g.myrecycleview.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.zhiyuan3g.myrecycleview.R;import com.zhiyuan3g.myrecycleview.bean.DataBean;import java.util.ArrayList;//提示:RecyclerViewGridAdapter和RecyclerViewListAdapter代码一样,就是改了一下item加载显示的布局//RecyclerView的适配器,要指定泛型,一般我们就是列类名的ViewHolder继承ViewHolder(内部已经实现了复用机制)public class RecyclerViewGridAdapter extends RecyclerView.Adapter<RecyclerViewGridAdapter.ViewHolder> { private Context context; private ArrayList<DataBean> datas; public RecyclerViewGridAdapter(Context context, ArrayList<DataBean> datas) { this.context = context; this.datas = datas; } @Override public RecyclerViewGridAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个布局为view对象 View view = View.inflate(context, R.layout.grid_item, null); //创建ViewHolder对象,传入view对象 ViewHolder viewHolder = new ViewHolder(view); //返回viewholder对象 return viewHolder; } @Override public void onBindViewHolder(RecyclerViewGridAdapter.ViewHolder holder, int position) { DataBean dataBean = datas.get(position); holder.setData(dataBean); } @Override public int getItemCount() { return datas.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private final ImageView mIcon; private final TextView mDescribe; public ViewHolder(View itemView) { super(itemView); mIcon = (ImageView) itemView.findViewById(R.id.icon_img); mDescribe = (TextView) itemView.findViewById(R.id.describe_tv); } public void setData(DataBean dataBean) { mIcon.setImageResource(dataBean.icon); mDescribe.setText(dataBean.name); } }}
DataBean.java
package com.zhiyuan3g.myrecycleview.bean;/** * * Author: * Function: Bean类的下的变量类型是根据需要哪些数据来决定 */public class DataBean { public int icon; public String name;}
完整Demo代码下载:http://pan.baidu.com/s/1gfMcQKN
0 0
- RecyclerView实现ListView和GridView的效果
- 使用RecyclerView实现GridView和ListView混排的效果
- RecyclerView--实现 ListView,GridView,瀑布流 效果
- 使用RecyclerView实现ListView,GridView效果
- ListView实现GridView的效果
- RecyclerView实现 gridview效果!
- RecyclerView下实现 ListView嵌套GridView 复杂效果
- RecyclerView的使用,简单实现ListView、GridView效果,添加Item的分割线
- RecyclerView实现横向的GridView效果
- 使用RecyclerView实现ListView,GridView的效果(上下,左右滑动),拖拽与滑动删除
- RecyclerView实现Listview效果
- ListView和GridView实现单选效果
- ListView和GridView实现单选效果
- 使用RecyclerView实现多行水平分页的GridView效果和ViewPager效果
- RecyclerView-干掉Listview和GridView
- 用ListView实现GridView的效果
- RecyclerView 实现listview和gridview布局(各自的子布局不同,网络数据)
- RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件
- Leetcode刷题(5)
- Lotus and Characters
- echarts3 柱状图
- QT之QCUSTOMPLOT绘图(一)配置和第一个例子
- jQuery EasyUI详解-EasyUI下拉列表datalist
- RecyclerView实现ListView和GridView的效果
- 【九度OJ】1202题-排序
- 第一次面试总结
- 通过一个实例 Shell的快速入门教程 !
- 15. 3Sum--leetcode
- IconFont 图标的3种引用方式
- 正则中的exec方法
- 数码管左移
- Java调用SMS Cat(短信猫)发短信