RecyclerView的使用方法和瀑布流的实现
来源:互联网 发布:java wait 例子 编辑:程序博客网 时间:2024/05/29 07:50
RecyclerView的功能十分强大,通过一个RecyclerView可以变换成为listview、gridview、瀑布流,下面就详细介绍一个RecyclerView的具体使用方法
项目示例截图:
1、首先找到RecyclerView的一个jar包,这个jar包要和你的sdk版本尽量是一致的,要不然有可能会出现找不到资源的错误,jar包路径在
..\sdk\extras\android\support\v7\recyclerview\libs(sdk安装路径下的文件夹)找到jar包之后可以直接拷贝到项目的libs文件下,然后就可以使用RecyclerView了
2、创建布局文件,示例中的布局文件只放置了一个RecyclerView,代码如下
(注意:要使用<android.support.v7.widget.RecyclerView>声明)
<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.example.recyclerviewdemo.MainActivity" > <<span style="color:#ff6666;">android.support.v7.widget.RecyclerView</span> android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
3、为RecyclerView的每一个item设置一个布局,这里就简单的使用一个TextView来充当item,内容设置为wrap_content
<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="wrap_content" android:background="#ffcc00" android:layout_margin="5dp" tools:context="com.example.recyclerviewdemo.MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="TextView" /></RelativeLayout>
4、为RecyclerView设置一个Adapter来实现数据和视图的一个绑定
(RecyclerView的adapter需要继承RecyclerView.Adapter<MyViewholder>这里的MyViewholder是重写的一个Viewholder,RecyclerView的adapter必须结合Viewholder来使用,这对布局的优化起了很大的作用)
RecyclerView的adapter主要有两个方法和一个Viewholder类组成
a、onCreateViewHolder方法,主要是实现把布局文件实例化出来,然后放进我们的Viewholder内部类中进行控件的实例化
public MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.item, arg0, false);MyViewholder myViewholder = new MyViewholder(view);return myViewholder;}
b、onBindViewHolder方法,主要是将数据和我们的控件绑定在一起,实现数据绑定
public void onBindViewHolder(final MyViewholder arg0, int arg1) {// TODO Auto-generated method stubarg0.textView.setText(list.get(arg1));}
c、ViewHolder内部类,这里我们重写了一个MyViewholder内部类,继承了Viewholder,实现控件的实例化
class MyViewholder extends ViewHolder {TextView textView;public MyViewholder(View arg0) {super(arg0);textView = (TextView) arg0.findViewById(R.id.textView1);}}通过上面几个方法的完成,我们就可以将数据通过构造方法传入adapter中,实现数据和视图的绑定
5、在MainActivity中,我们需要实例化我们的adapter和RecyclerView
控件的实例化和平时一样,主要讲一下RecyclerView和listveiw等不同的点,RecyclerView主要是通过LayoutManager来进行管理的,通过LayoutManager来实现不同的样式,下面我们来分别介绍一下,通过RecyclerView来实现listview和gridview和瀑布流三种样式
a、实现listview功能
通过使用LinearLayoutManager我们可以实现listveiw的样式
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);recyclerView.setLayoutManager(layoutManager);这里是设置了一个垂直方向的listview
b、通过使用GridLayoutManager我们可以实现GridView样式
recyclerView.setLayoutManager(new GridLayoutManager(this, 3,GridLayoutManager.HORIZONTAL, false));上面参数表示了分3列显示数据,方向为水平方向
c、通过使用StaggeredGridLayoutManager我们可以实现瀑布流样式
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));通过上面简单的设置我们就可以实现不同的显示样式,方法非常简单
6、上面已经介绍了比较核心的使用代码,下面把项目的源码发布一下
6.1 MainActivity代码
public class MainActivity extends ActionBarActivity {private RecyclerView recyclerView;private List<String> lists;private MyAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();}//private void initView() {// TODO Auto-generated method stubrecyclerView = (RecyclerView) findViewById(R.id.recyclerview);recyclerView.setAdapter(mAdapter);LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);recyclerView.setLayoutManager(layoutManager); //此处是为了添加一个分隔线// recyclerView.addItemDecoration(new DividerItemDecoration(// getApplicationContext(), DividerItemDecoration.VERTICAL_LIST));}private void initData() {// TODO Auto-generated method stublists = new ArrayList<String>();for (int i = 0; i < 20; i++) {if (i % 2 == 0) {lists.add("ggggggggggggggggffffffffffffffggggggggggggggggffffffffffffffggggggggggggggggfffffffffffffffffffffffffkkkkk"+ i);} else {lists.add("gggggggggggggggg" + i);}}mAdapter = new MyAdapter(getApplicationContext(), lists);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubgetMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case R.id.listview:recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false));break;case R.id.gridview:recyclerView.setLayoutManager(new GridLayoutManager(this, 3));break;case R.id.horizengridview:recyclerView.setLayoutManager(new GridLayoutManager(this, 2,GridLayoutManager.HORIZONTAL, false));break;case R.id.pubuliu:recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));break;case R.id.add:mAdapter.add(1);break;case R.id.delete:mAdapter.delete(1);break;}return true;}}
6.2 MyAdapter代码
public class MyAdapter extends RecyclerView.Adapter<MyViewholder> {private LayoutInflater inflater;private Context context;private List<String> list;public MyAdapter(Context context, List<String> list) {// TODO Auto-generated constructor stubthis.context = context;this.list = list;inflater = LayoutInflater.from(context);}@Overridepublic int getItemCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic void onBindViewHolder(final MyViewholder arg0, int arg1) {// TODO Auto-generated method stubarg0.textView.setText(list.get(arg1));}@Overridepublic MyViewholder onCreateViewHolder(ViewGroup arg0, int arg1) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.item, arg0, false);MyViewholder myViewholder = new MyViewholder(view);return myViewholder;}public void add(int pos) {list.add(pos, "插入新的");this.notifyItemInserted(pos);}public void delete(int pos) {list.remove(pos);this.notifyItemRemoved(pos);}}class MyViewholder extends ViewHolder {TextView textView;public MyViewholder(View arg0) {super(arg0);// TODO Auto-generated constructor stubtextView = (TextView) arg0.findViewById(R.id.textView1);}}
7、注意:本示例,RecyclerView无法响应单击事件,下个博文会介绍怎么给RecyclerView添加单击响应事件,请查看下一个博文
0 0
- RecyclerView的使用方法和瀑布流的实现
- 基于RecyclerView和Volley的瀑布流照片墙实现
- RecyclerView的瀑布流
- RecyclerView瀑布流的简单实现
- 基于RecyclerView的瀑布流实现
- RecyclerView用法之瀑布流的实现
- RecyclerView实现瀑布流的效果
- android 瀑布流的实现(用recyclerview的实现的)
- RecyclerView做的瀑布流
- Fresco,Retrofit 和 RecyclerView 实现瀑布流
- RecyclerView实现瀑布流
- recyclerView实现瀑布流
- Fresco和 RecyclerView 实现瀑布流 <图片是用本地图片来模拟网络图片的>
- Android RecyclerView 详解(二) 点击事件绑定、瀑布流和Grid的实现
- 使用RecyclerView实现的瀑布流高度自适应
- RecyclerView的简单使用以及实现瀑布流效果
- 5.使用RecyclerView优雅的实现瀑布流效果
- 使用RecyclerView实现的瀑布流高度自适应
- SharedPreferences——安卓存储方案之一
- 使用FLASHBACK TABLE 恢复被删除表
- nova修改libvirt.xml及自定义xml文件修改nova代码支持vhost
- HBase拆分策略
- 微信红包接口---你不知道的坑爹官方支付文档
- RecyclerView的使用方法和瀑布流的实现
- Android 实现图片高斯模糊算法,真正有效的工具类
- FLV容器分析2
- <安卓那点事>写一个简单的电话拨号器
- C++指针与引用
- 一套通过c#-sap-rfc 完整处理内表输入输出并将数据保存至SAP自建表中的程序
- 嵌入式 环形缓冲区的设计与实现
- Android平台的崩溃捕获机制及实现
- Activity界面显示全解析