recyclerview

recyclerview刷新

痞子三分冷 提交于 2019-12-04 15:07:30
notifyDataSetChanged() 调用此方法后,仅刷新屏幕以内的item,当下次滑动让屏幕外item进来,则再执行onBindViewHolder()进行刷新 notifyItemChanged(int position) 仅更新指定的position的item notifyItemRangeChanged() position数据发生了改变,那调用这个方法,就会回调对应position的onBindViewHolder()方法了,因为ViewHolder是复用的, 所以如果position在当前屏幕以外,也就不会回调了,下次position滚动会当前屏幕以内的时候同样会调onBindViewHolder()方法刷新数据了。 notifyItemInserted(position :int) 这个方法是在第position位置被插入了一条数据的时候可以使用这个方法刷新 notifyItemMoved(int fromPosition, int toPosition) 这个方法是从fromPosition移动到toPosition为止的时候可以使用这个方法刷新 notifyItemRangeInserted(int positionStart, int itemCount) 批量添加。 notifyItemRemoved(int position)

recyclerview Adapter

两盒软妹~` 提交于 2019-12-04 15:07:24
onBindViewHolder: 绑定数据到ViewHoldergetItemCount:获取总的条目数onCreateViewHolder:创建ViewHoldergetItemViewType():获取item对应的类型getItemId(int position): 返回项目的稳定ID positionhasObservers():若一个或多个观察者连接到此适配器,则返回trueonAttachedToRecyclerView(Recyclerview recyclerview):recyclerview开始观察此适配器的时候调用onDetachedFromRecyclerView(RecyclerView recyclerview):当recyclerview停止观察此适配器调用onFailedToRecyclerView(VH holder):若由此适配器创建的ViewHolder由于瞬间状态无法回收,则由recyclerview调用onViewAttachedToWindow(VH holder):此适配器创建的视图已附加到窗口时调用onViewDetachedFromWindow(VH holder):此适配器创建的视图已从其窗口中分离时调用onViewRecycled(VH holder)

设计模式——享元模式

ⅰ亾dé卋堺 提交于 2019-12-04 15:06:09
定义 享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 模板 FlyweightFactory享元工厂类:创建并管理享元对象,享元池一般设计成键值对 FlyWeight抽象享元类:通常是一个接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。 ConcreteFlyWeight具体享元类:为内部状态提供成员变量进行存储 UnsharedConcreteFlyWeight非共享享元类:不能被共享的子类可以设计为非共享享元类 实例 看下面一张普通的快递列表页面: 该列表中有两种内容: 一种是快递信息行 另一种是 标题行(大些字母表示的用于分类的)。对于这样一个页面: ConcreteFlyWeight部分: 两类信息的view布局 UnsharedConcreteFlyWeight: 标题内容/快递名称及图片 android中对于列表的view复用已经封装在ListView/RecyclerView中,业务只需要实现相应的接口即可实现布局的复用,但这里复用的核心思想就是 “享元模式”。 具体的实现与分析,见下面的代码 public class ExpressAdapter extends RecyclerView

Android 5.0+(RecycleView、CardView、Palette)

两盒软妹~` 提交于 2019-12-04 05:19:42
Android L 开发者预览支持库提供两个新的Widgets,RecyclerView和CardView。使用这两个Widgets可以显示复杂的Listview和卡片布局,这两个Widgets默认使用Material design。 RecyclerView RecyclerView是一个更高级柔性版本的Listview,RecyclerView是一个能包含很多视图的容器,它能完美的处理循环和滚动。在item动态变化的Listview使用RecyclerView。 RecyclerView使用很简单,因为它提供了: 1、定位item的布局管理器 2、常见的item操作默认动画 你能够灵活的为RecyclerView自定义布局管理器和动画。 使用RecyclerView,必须使用指定一个adapter、定义一个布局管理器。创建adapter必须继承自RecyclerView.Adapter。实施的细节需要看数据类型和需要的视图。 RecyclerView widget RecyclerView 提供了 LayoutManager,RecylerView 不负责子 View 的布局 目前提供了 LinearLayoutManager(显示垂直或水平滚动列表中的条目。) GridLayoutManager(在一个网格显示项) StaggeredGridLayoutManager

RecyclerView的刷新分页

百般思念 提交于 2019-12-03 18:55:20
在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作。 RecyclerView的使用请参考: RecyclerView的简单使用 RecyclerView的 Item 的单击事件请参考: RecyclerView的 Item 的单击事件 实现思路 加载更多数据使用到 RecyclerView 加载多种布局,根据 ViewType 判断加载数据 Item 还是加载 FooterItem ; 通过线程模拟加载数据; 为 RecyclerView 添加 addOnScrollListener 事件来监听用户的滑动操作; 根据用户滑动状态以及具体情况开始加载数据 通知数据更新; 如何获得 firstVisibleItemPosition 为了能够在数据加载中动态判断什么时候加载数据,需要知道屏幕上显示的第一个可见的 Item 的位置,当然了这里使用的是布局管理器是 LinearLayoutManager ,这样查找屏幕上第一个可见的 Item 就显得容易多了,下面介绍一些 LinearLayoutManager 的四个方法: findFirstVisibleItemPosition() 获得屏幕上第一个可见 Item 的 position,只要该 Item 有一部分可见,那么返回的 position 就是该Item 的 position。

Android开发操作案例分享!

一笑奈何 提交于 2019-12-03 18:54:58
Android开发操作案例分享! Android LRecyclerView 操作案例分享-实现下拉刷新、滑动到底部自动加载,一直想抽空写下这个开源项目 www.lampbrother.net ,但是各种原因没有抽时间,今天还是趁着工作间隙写下了这篇博客,与大家分享。 简介 LRecyclerView是支持addHeaderView、 addFooterView、下拉刷新、分页加载数据的RecyclerView。 它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView、FooterView,并且不需要对你的Adapter做任何修改。 主要功能 下拉刷新、滑动到底部自动加载下页数据; 可以方便添加Header和Footer; 头部下拉样式可以自定义; 具备item点击和长按事件。 网络错误加载失败点击Footer重新请求数据; 可以动态为FooterView赋予不同状态(加载中、加载失败、滑到最底等)。 感谢 如果我比别人看得远些,那是因为我站在巨人们的肩上。 (牛顿) 本开源控件是基于 HeaderAndFooterRecyclerView 开源项目而来,在原基础上进行了扩充。在此感谢兄弟连教育(www.lampbrother.net)的分享 Gradle Step 1. 在你的根build.gradle文件中增加JitPack仓库依赖。

Add list item in RecyclerView Adapter on receiving Firebase message

匿名 (未验证) 提交于 2019-12-03 10:24:21
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm using the firebase messaging service for messaging and notifications. I can't seem to be able to pass an incoming message from the service to the adapter so that when the message is received it can be inserted into the RecycleView List. I tried using BroacastIntent as follows : public class messaging extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage m) { store(m.getData()); broadcastIntent(); } public void broadcastIntent() { Intent intent = new Intent(); intent.setAction("com.myApp.CUSTOM_EVENT");

RecyclerView GridLayoutManager: change column width

匿名 (未验证) 提交于 2019-12-03 10:10:24
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have a RecyclerView and a GridLayoutManager. The columns width are equal but I want the first column with 80dp width. Is this possible? Example: RecyclerView width 5 columns final columnsCount = 5; recyclerView.width = 500dp column0.width = 80dp column 1-2-3-4 width = (recyclerview.width - column0.width) / columnsCount Any advice? Edit: code public class TestRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int VIEW_TYPE_START = 0; private static final int VIEW_TYPE_PROGRESS_ITEM = 1; private

onClickListener in RecyclerView adapter?

匿名 (未验证) 提交于 2019-12-03 09:19:38
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I want to set up an onClickListener within my RecyclerView adapter so I can easily refer to the other views to retrieve their tags. Is it possible to set up an onClickListener in a RecyclerView adapter? How would I do it? Would it affect performance? Here is my RecyclerView adapter: public class PostRecyclerAdapter extends RecyclerView . Adapter < PostRecyclerAdapter . ViewHolder > { private Context context ; private List < Post > mDataset ; public static class ViewHolder extends RecyclerView . ViewHolder implements View .

java.lang.IllegalStateException: RecyclerView has no LayoutManager

匿名 (未验证) 提交于 2019-12-03 09:06:55
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am getting below exception- Caused by: java.lang.IllegalStateException: RecyclerView has no LayoutManager at android.support.v7.widget.RecyclerView.generateLayoutParams(RecyclerView.java:2820) at android.view.LayoutInflater.rInflate(LayoutInflater.java:757) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at com.peoplecloud.app.guggu.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:75) at android.app.Fragment.performCreateView(Fragment.java