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

默认配置如下 :

  1. LayoutMannagerLinearLayoutManager
  2. ItemAnimatorDefaultItemAnimator

你可以修改成你想要的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相关推荐

  1. Android(java)学习笔记96:layout_weight使用注意事项

    1. android:layout_weight使用说明: layout_weight是权重的意思,也就是各个控件所占的比重,用在LinearLayout布局中.当我们使用layout_weight的 ...

  2. Android添加权限大讲解

    http://bbs.51cto.com/thread-1096739-1.html 对于新手来说,最烦恼的不是如何从网上下载到安卓项目,而是下载到的安卓项目不知道如何添加权限和要添加哪些权限.现在就 ...

  3. android二级列表展开,ExpandableListView控件实现二级列表

    效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...

  4. Android 注册登入界面完美设计

    今天没啥事情做,就想着复习复习android,不然快把android给忘记了,于是乎就干起来.边学边复习边做做,正好我手上有一些自己爬虫的数据,想着没事干的时候可以做做一个小商城,当作练练手. 开发环 ...

  5. Android中发送和接收短信

    在做Android开发中经常要用到短信的发送和短信的接收,调用Android提供的api实现起来很简单,今天要用到这个功能研究了一下顺便写下来加强一下记忆. 1.首先创建一个Android Proje ...

  6. android WIFI检测与设置

    WIFI是无线通信协议,可以允许手机直接连接到无线网络.在现在3G资费还比较贵的情况下,WIFI对于手机来说是很重要的,我们可以很方便的下载软件,音乐等资源.Android手机必须要有WIFI网卡才能 ...

  7. VS2015 Cordova实现WebView加载页面进度条(Android)

    因为使用Cordova做app时,加载页面没有进度条,用户无法感知打开进度,故加入进度条,具体实现如下: 1.  如果项目没有生成过apk,需先生成一次,这样在项目下面才会出现platforms/an ...

  8. AndroidのUI设计研究(一)——自定义ProgressBar

    最近迷上进度条,使用进度条可以增强用户体验,让用户心里有个底,再无奈的等待中体会loading的乐趣. 记得以前优乐美的官网,进入主页加载资源,显示给用户看的就是,炫彩背景下,一个杯子里的奶茶随着加载 ...

  9. Android常见面试题解答

    1. Activity与Fragment的生命周期. onCreate过程 01-22 15:30:28.091: E/HJJ(10315): Activity &&&& ...

最新文章

  1. rsync推拉模型及结合inotify实现推模型自动同步
  2. python学习-38迭代器和生成器
  3. UVAoj 11324 - The Largest Clique(tarjan + dp)
  4. C#中Dictionary的用法及用途(转)
  5. Officescan如何藉由修改用戶端機碼以開啟常用功能
  6. Matlab 2020b安装教程
  7. python做大数据可视化软件_四款最受欢迎的大数据可视化工具
  8. 英特尔显卡不支持自定义分辨率N卡解决办法
  9. 网站服务器如何直接播放视频,视频放服务器链接直接播放
  10. android 账户管理实现
  11. loss下降auc下降_从基本原理到梯度下降算法:零基础也能看懂的神经网络教程...
  12. Java正则获取a标签href_获取页面所有a标签href
  13. AI面部修复项目:GFP-GAN
  14. 1823. 找出游戏的获胜者
  15. html制作svg工具,使用Adobe Illustrator制作SVG的操作流程
  16. css html 鼠标手型,鼠标形状,鼠标效果,样式
  17. linux中释放sweep分区,详解Windows系统中如何释放C盘空间
  18. 浅谈PageRank算法
  19. 斑马GK888T打印机跑纸(打印半张以及闪红灯)解决办法
  20. 蛇形填数(蛇形矩阵)c++

热门文章

  1. 智牛股_第5章_Netty+PowerDesigner
  2. spring-银行转账系统
  3. 流氓软件卸载 比如Qiaozip 巧压等进程导致占用无法删除
  4. buck-boost电路计算
  5. SPSS数据类型学习
  6. python--(常用模块-1)
  7. python 爬取24小时天气数据
  8. 哈佛大学开放课程:《公正:该如何做是好?》6
  9. iOS AppStore上架流程图文详解​
  10. Risk Management and Financial Institution Chapter 2 —— Banks