28.Android 十分方便的EasyRecyclerView
28.Android 十分方便的EasyRecyclerView
- Android 十分方便的EasyRecyclerView
- 前言
- 无限被放大的优点
- Gradle
- Adapter
- EasyRecyclerView
- Decoration
- EasyDividerItemDecorationActivity
- RecyclerView设置布局管理器
- RecyclerView设置Item动画
- 效果图
- Github传送门
前言
如果你的非常喜欢Android技术,并不止把它当作一项工作,那么这里统称为“我们”。
我们很早就都知道: RecyclerView的存在是为了取代ListView 。
无限被放大的优点
- 1.规范了ViewHolder,把ViewHolder封装起来,并让我们继承这个抽象类
RecyclerView.ViewHolder
。 - 2.把ItemView存放到RecyclerView.ViewHolder,通过复用RecyclerView.ViewHolder实现ItemView的复用。
- 3.RecyclerView.Adapter
Gradle
dependencies {compile 'com.camnter.easyrecyclerview:easyrecyclerview:1.1.0'
}
Adapter
测试用的EasyDividerItemDecorationAdapter。
public class EasyDividerItemDecorationAdapter extends EasyRecyclerViewAdapter {private static final int MULTIPLE_ITEM_TYPE = 0;private static final int SINGLE_ITEM_TYPE = 1;/*** Please return RecyclerView loading layout Id array* 请返回RecyclerView加载的布局Id数组** @return 布局Id数组*/@Overridepublic int[] getItemLayouts() {return new int[]{R.layout.item_recyclerview_multiple, R.layout.item_recyclerview_single};}/*** butt joint the onBindViewHolder and* If you want to write logic in onBindViewHolder, you can write here* 对接了onBindViewHolder* onBindViewHolder里的逻辑写在这** @param viewHolder viewHolder* @param position position*/@Overridepublic void onBindRecycleViewHolder(EasyRecyclerViewHolder viewHolder, int position) {int itemType = this.getRecycleViewItemType(position);EasyRecyclerViewData data = this.getItem(position);switch (itemType) {case MULTIPLE_ITEM_TYPE: {TextView multipleTV = viewHolder.findViewById(R.id.recycler_view_mul_tv);ImageView multipleIV = viewHolder.findViewById(R.id.recycler_view_mul_iv);multipleTV.setText(data.content);multipleIV.setImageResource(data.imageResId);break;}case SINGLE_ITEM_TYPE: {ImageView singleIV = viewHolder.findViewById(R.id.recycler_view_single_iv);singleIV.setImageResource(data.imageResId);break;}}}/*** Please write judgment logic when more layout* and not write when single layout* 如果是多布局的话,请写判断逻辑* 单布局可以不写** @param position Item position* @return 布局Id数组中的index*/@Overridepublic int getRecycleViewItemType(int position) {if (position % 2 == 0) {return SINGLE_ITEM_TYPE;} else {return MULTIPLE_ITEM_TYPE;}}}
EasyRecyclerView
默认配置如下 :
- LayoutMannager = LinearLayoutManager
- ItemAnimator = DefaultItemAnimator
你可以修改成你想要的LayoutManager和ItemAnimator。
EasyRecyclerView recyclerView = (EasyRecyclerView) this.findViewById(R.id.recycler_view);
this.myRecycleViewAdapter = new MyRecycleViewAdapter();
recyclerView.setAdapter(this.myRecycleViewAdapter);// set divider
recyclerView.addItemDecoration(new EasyDividerItemDecoration(this,EasyDividerItemDecoration.VERTICAL_LIST,R.drawable.bg_recycler_view_divider)
);
Decoration
提供了两种Decoration:
EasyDividerItemDecoration
EasyBorderDividerItemDecoration
EasyDividerItemDecorationActivity
就贴几个类的源码,等会看到效果图,就知道不需要我贴布局文件了。因为:很简单。
EasyDividerItemDecorationActivity
public class EasyDividerItemDecorationActivity extends AppCompatActivity {private EasyDividerItemDecorationAdapter easyDividerItemDecorationAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_divider);EasyRecyclerView recyclerView = (EasyRecyclerView) this.findViewById(R.id.recycler_view);this.easyDividerItemDecorationAdapter = new EasyDividerItemDecorationAdapter();recyclerView.setAdapter(this.easyDividerItemDecorationAdapter);// set dividerrecyclerView.addItemDecoration(new EasyDividerItemDecoration(this,EasyDividerItemDecoration.VERTICAL_LIST,R.drawable.bg_recycler_view_divider));this.initData();}private void initData() {ArrayList<EasyRecyclerViewData> allData = new ArrayList<>();for (int i = 1; i <= 6; i++) {EasyRecyclerViewData dataSingle = new EasyRecyclerViewData();EasyRecyclerViewData dataMultiple = new EasyRecyclerViewData();String mipmapName = "mm_" + i;int mipmapId = this.getMipmapId(this, mipmapName);dataSingle.imageResId = mipmapId;dataMultiple.content = "Save you from anything " + "26" + "-" + i;dataMultiple.imageResId = mipmapId;allData.add(dataSingle);allData.add(dataMultiple);}this.easyDividerItemDecorationAdapter.setList(allData);this.easyDividerItemDecorationAdapter.notifyDataSetChanged();}public int getMipmapId(Context context, String mipmapName) {return context.getResources().getIdentifier(mipmapName,"mipmap", context.getPackageName());}}
RecyclerView设置布局管理器
RecyclerView.setLayoutManager(LayoutManager layout)
RecyclerView有三种布局方式:
- LinearLayoutManager(线性布局)
- GridLayoutManager(网格布局)
- StaggeredGridLayoutManager(瀑布流网格布局)
RecyclerView设置Item动画
RecyclerView.setItemAnimator(ItemAnimator animator)
一般默认提供了一个new DefaultItemAnimator()
。当然我们还可以自定义Item动画。
有一个意大利大神写的RecyclerViewItemAnimators
效果图
EasyDividerItemDecoration
EasyBorderDividerItemDecoration
Github传送门
EasyRecyclerView
28.Android 十分方便的EasyRecyclerView相关推荐
- Android(java)学习笔记96:layout_weight使用注意事项
1. android:layout_weight使用说明: layout_weight是权重的意思,也就是各个控件所占的比重,用在LinearLayout布局中.当我们使用layout_weight的 ...
- Android添加权限大讲解
http://bbs.51cto.com/thread-1096739-1.html 对于新手来说,最烦恼的不是如何从网上下载到安卓项目,而是下载到的安卓项目不知道如何添加权限和要添加哪些权限.现在就 ...
- android二级列表展开,ExpandableListView控件实现二级列表
效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...
- Android 注册登入界面完美设计
今天没啥事情做,就想着复习复习android,不然快把android给忘记了,于是乎就干起来.边学边复习边做做,正好我手上有一些自己爬虫的数据,想着没事干的时候可以做做一个小商城,当作练练手. 开发环 ...
- Android中发送和接收短信
在做Android开发中经常要用到短信的发送和短信的接收,调用Android提供的api实现起来很简单,今天要用到这个功能研究了一下顺便写下来加强一下记忆. 1.首先创建一个Android Proje ...
- android WIFI检测与设置
WIFI是无线通信协议,可以允许手机直接连接到无线网络.在现在3G资费还比较贵的情况下,WIFI对于手机来说是很重要的,我们可以很方便的下载软件,音乐等资源.Android手机必须要有WIFI网卡才能 ...
- VS2015 Cordova实现WebView加载页面进度条(Android)
因为使用Cordova做app时,加载页面没有进度条,用户无法感知打开进度,故加入进度条,具体实现如下: 1. 如果项目没有生成过apk,需先生成一次,这样在项目下面才会出现platforms/an ...
- AndroidのUI设计研究(一)——自定义ProgressBar
最近迷上进度条,使用进度条可以增强用户体验,让用户心里有个底,再无奈的等待中体会loading的乐趣. 记得以前优乐美的官网,进入主页加载资源,显示给用户看的就是,炫彩背景下,一个杯子里的奶茶随着加载 ...
- Android常见面试题解答
1. Activity与Fragment的生命周期. onCreate过程 01-22 15:30:28.091: E/HJJ(10315): Activity &&&& ...
最新文章
- rsync推拉模型及结合inotify实现推模型自动同步
- python学习-38迭代器和生成器
- UVAoj 11324 - The Largest Clique(tarjan + dp)
- C#中Dictionary的用法及用途(转)
- Officescan如何藉由修改用戶端機碼以開啟常用功能
- Matlab 2020b安装教程
- python做大数据可视化软件_四款最受欢迎的大数据可视化工具
- 英特尔显卡不支持自定义分辨率N卡解决办法
- 网站服务器如何直接播放视频,视频放服务器链接直接播放
- android 账户管理实现
- loss下降auc下降_从基本原理到梯度下降算法:零基础也能看懂的神经网络教程...
- Java正则获取a标签href_获取页面所有a标签href
- AI面部修复项目:GFP-GAN
- 1823. 找出游戏的获胜者
- html制作svg工具,使用Adobe Illustrator制作SVG的操作流程
- css html 鼠标手型,鼠标形状,鼠标效果,样式
- linux中释放sweep分区,详解Windows系统中如何释放C盘空间
- 浅谈PageRank算法
- 斑马GK888T打印机跑纸(打印半张以及闪红灯)解决办法
- 蛇形填数(蛇形矩阵)c++