Android RecyclerView的使用

参考:http://blog.csdn.net/lmj623565791/article/details/45059587

RecyclerView是在android5.0加入的,android有提供向下兼容的包,而这个包在对于用eclipse(而且没有更新最新的sdk)开发的人来说的确是比较麻烦的事,如果有朋友属于我上面说的情况-------用eclipse,而且还不是最新的sdk,那就需要导入两个包:一个是android.support.v7.widget.RecyclerView,还有一个就是对应版本的android.support.v4包。很多人都是直接从网上下一个android.support.v7.widget.RecyclerView包就拿过来用,结果报一堆错,基本也就是上面说的版本不对应的缘故。其实这个包在自己的sdk(sdk比较新)下是有的,在sdk目录下的extras/android/support/v7/RecyclerView下面,如果v7下面没有RecyclerView那就是你的sdk版本过低,最好的方法就是下载最新的sdk,下载方法我就不说了大家自行查阅。

上面是使用eclipse的情况,如果使用的是Android Studio,那就简单了,直接点击左上角的File/Project Structure,在左边Modules中找到我们的项目,点击一下确定焦点在我们要添加RecyclerView的项目中,然后在右边点击Dependencies,然后找一下有个加号,可能在右边也可能在下边(不同版本Android Studio会有出入),然后点击library dependency,直接在下面找recyclerview(主要是找名字中带recyclerview v7的,全名上可能有差异,我的Android Studio中这个包的名字是com.android.support:recyclerview-v7...)点击ok就搞定了。

建议大家还是使用Android Studio,毕竟大势所趋。。。

上面讲了导包的问题,接下来进入RecyclerView使用的讲解,这里只举例实现瀑布流。
首先设置LayoutManager,会用到的就那么几种
LinearLayoutManager 现行管理器,支持横向、纵向。
GridLayoutManager 网格布局管理器
StaggeredGridLayoutManager 瀑布就式布局管理器

我们要实现瀑布流就选择设置LayoutManager为StaggeredGridLayoutManager,使用方法mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));,其中第一个参数表示为4列(这个根据后一个参数来,这里后一个参数是垂直,所以就是表示有4列,如果后一个参数是水平那就表示4行)。

之后可以设置动画,这里我觉得使用默认的效果就可以了,如果自己想实现的话也可以,可以参考https://github.com/gabrielemariotti/RecyclerViewItemAnimators,设置动画的方法mRecyclerView.setItemAnimator(new DefaultItemAnimator());这个就是使用了默认的动画效果。设置了之后在添加或者删除数据的时候就会有比较好看的动画效果了,添加数据之后要使用notifyItemInserted(position),删除使用notifyItemRemoved(position)。

接下来设置适配器,使用setAdapter方法设置,这里要注意一点,RecyclerView自己有一个适配器(不再使用BaseAdapter),其中强制我们使用ViewHolder,具体和之前的BaseAdapter方法没什么大的区别,只是将之前的getView方法一分为二:onBindViewHolder,onCreateViewHolder。在onCreateViewHolder创建viewholder,在onBindViewHolder中设置属性值。

到上面这一步就已经实现了Gridview,但是你会发现着还不是瀑布流,而且item之间没有空隙,怎么实现空隙能,又要用到另一个方法叫做addItemDecoration(),而要传的参数尽然没有默认,要自己去实现,也就是新建一个类extends RecyclerView.ItemDecoration,我觉得其中主要要实现的方法就是getItemOffsets(),实现这个之后你会发现最后一行和最后一列之后也出现了空隙,这不是我们想要的效果,但是,我这里要说但是,如果你去控制最后一行和最后一列之后没有空隙当你添加或者删除的时候也会出现不想要的东西。举例说明:你的RecyclerView有4列,最后一列之后没有空隙,当你在第二列添加一项,则原先的第四列(代码中就是postion在3的哪一个item)就到了第二行,这时候你就会看到,第二行的第一项和第二项连在了一起,因为第二行的第一项(从第一行移下来的)没有设置空隙。讲到这里大致就清楚了这个方法,其实还有另外两个方法可以重写,就是给空隙填充上东西,当我觉得没那么重要,这里就不说了,可以去看下http://blog.csdn.net/lmj623565791/article/details/45059587   ,其中有较为详细的介绍。还有其他的实现方法就是不使用这个addItemDecoration方法(太不好用了),而是在布局中做文章,就是在item的外层布局中设置layout_margin或者padding(我觉得padding比较好)。这里的话就暂且先使用addItemDecoration实现,以作为此方法的演示。

有了空隙之后就变成了一个Gridview,怎么变成瀑布流呢?很简单了,就只要在onBindViewHolder设置item的高度就可以了。我参考的文章中有讲,这里不再做详细介绍。

附上源码:http://download.csdn.net/detail/u012806692/9471813




RecyclerViewAndroid 的一个高效的列表控件,相比 ListView 和 GridView,它更加灵活,可以实现更多的功能。以下是使用 RecyclerView 的基本步骤: 1. 在布局文件添加 RecyclerView 控件: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建一个 RecyclerView.Adapter 的子类,用于提供数据和创建列表项的视图: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_view, parent, false); return new ViewHolder(itemView); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = mData.get(position); holder.mTextView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text); } } } ``` 3. 在 Activity 或 Fragment 设置 RecyclerView 的布局管理器和适配器: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(new MyAdapter(data)); ``` 以上是 RecyclerView 的基本使用方法,可以通过更改 Adapter 的实现来实现不同的列表展示方式,如瀑布流、网格等。另外,RecyclerView 还提供了各种回调和方法,使得开发者可以轻松地实现拖拽、滑动删除等交互效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值