package com.ethanco.diffutiltest;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.ethanco.diffutiltest.databinding.ItemBinding;
import java.util.List;
/**
* 最核心类,不要被命名困惑,它不像你日常所使用的回调。可以将它理解成 比较新老数据集时的规则
* 通过覆盖特定方法给出数据比较逻辑
* Created by EthanCo on 2016/9/5.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ItemViewHodler> {
public static final String KEY_TITLE = "MyAdapter_key_title";
public static final String KEY_CONTENT = "MyAdapter_key_content";
public static final String KEY_FOOTER = "MyAdapter_key_footer";
public void setData(List<Item> data) {
this.data = data;
}
private List<Item> data;
private Context mContext;
public MyAdapter(Context context, List<Item> data) {
this.data = data;
this.mContext = context;
}
@Override
public ItemViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.item, parent, false);
return new ItemViewHodler(view);
}
@Override
public void onBindViewHolder(ItemViewHodler holder, int position) {
holder.bindData(data.get(position));
}
@Override
public void onBindViewHolder(ItemViewHodler holder, int position, List<Object> payloads) {
super.onBindViewHolder(holder, position, payloads);
if (holder instanceof ItemViewHodler) {
((ItemViewHodler) holder).bindData(data.get(position));
}
if (payloads == null || payloads.isEmpty()) {
return;
}
Bundle o = (Bundle) payloads.get(0);
for (String key : o.keySet()) {
switch (key) {
case KEY_TITLE:
((ItemViewHodler) holder).updateTitle(o.getString(KEY_TITLE));
break;
case KEY_CONTENT:
((ItemViewHodler) holder).updateContent(o.getString(KEY_CONTENT));
break;
case KEY_FOOTER:
((ItemViewHodler) holder).updateFooter(o.getString(KEY_FOOTER));
break;
}
}
}
@Override
public int getItemCount() {
return data.size();
}
class ItemViewHodler extends RecyclerView.ViewHolder {
private final ItemBinding binding;
public ItemViewHodler(View itemView) {
super(itemView);
binding = DataBindingUtil.bind(itemView);
}
public void bindData(Item item) {
binding.setItem(item);
}
public void updateTitle(String title) {
binding.tvTitle.setText(title);
}
public void updateContent(String content) {
binding.tvContent.setText(content);
}
public void updateFooter(String footer) {
binding.tvFooter.setText(footer);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
使用DiffUtil高效更新Recyclerview
共84个文件
xml:48个
bin:6个
java:6个
4星 · 超过85%的资源 需积分: 47 79 下载量 88 浏览量
2016-09-05
13:44:00
上传
评论
收藏 770KB ZIP 举报
温馨提示
通过DiffUtil更新RecyclerView的Demo DiffUtil用于比较两个数据列表并能计算出一系列将旧数据表转换成新数据表的操作。 当你的RecyclerView需要更新数据时,将旧数据集传给它,它就能快速告知adapter有哪些数据需要更新。 详情请看 http://blog.csdn.net/EthanCo/article/details/52439543
资源推荐
资源详情
资源评论
收起资源包目录
DiffUtilTest.zip (84个子文件)
DiffUtilTest
gradlew.bat 2KB
gradlew 5KB
gradle.properties 872B
DiffUtilTest.iml 943B
.gradle
2.14.1
tasks
_app_compileDebugJavaWithJavac
localJarClasspathSnapshot
localJarClasspathSnapshot.bin 21KB
localJarClasspathSnapshot.lock 17B
localClassSetAnalysis
localClassSetAnalysis.lock 17B
localClassSetAnalysis.bin 36KB
taskArtifacts
fileHashes.bin 236KB
cache.properties.lock 17B
taskArtifacts.bin 116KB
fileSnapshotsToTreeSnapshotsIndex.bin 28KB
fileSnapshots.bin 4.25MB
cache.properties 31B
app
proguard-rules.pro 659B
src
test
java
com
ethanco
diffutiltest
ExampleUnitTest.java 331B
androidTest
java
com
ethanco
diffutiltest
ApplicationTest.java 367B
main
res
menu
menu_main.xml 290B
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 78B
styles.xml 394B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
item.xml 1KB
activity_main.xml 541B
values-w820dp
dimens.xml 364B
java
com
ethanco
diffutiltest
MyAdapter.java 3KB
MainActivity.java 3KB
Item.java 427B
MyDiffCallback.java 2KB
AndroidManifest.xml 683B
app.iml 13KB
.gitignore 8B
build.gradle 759B
libs
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 239B
.idea
gradle.xml 739B
runConfigurations.xml 564B
misc.xml 3KB
.name 12B
copyright
profiles_settings.xml 76B
modules.xml 361B
encodings.xml 159B
compiler.xml 686B
workspace.xml 169KB
libraries
library_1_1.xml 554B
support_compat_24_2_0.xml 976B
antlr_runtime_3_5_2.xml 291B
recyclerview_v7_24_2_0.xml 776B
antlr4_runtime_4_5.xml 299B
kotlin_runtime_1_0_0.xml 305B
org_abego_treelayout_core_1_0_1.xml 338B
compilerCommon_2_1_3.xml 308B
support_vector_drawable_24_2_0.xml 637B
kotlin_stdlib_1_0_0.xml 302B
support_fragment_24_2_0.xml 990B
appcompat_v7_24_2_0.xml 758B
animated_vector_drawable_24_2_0.xml 642B
support_core_utils_24_2_0.xml 822B
baseLibrary_2_1_3.xml 299B
commons_io_2_4.xml 417B
ST4_4_0_8.xml 261B
support_v4_24_2_0.xml 420B
hamcrest_core_1_3.xml 526B
support_annotations_24_2_0.xml 489B
junit_4_12.xml 477B
adapters_1_1.xml 559B
support_media_compat_24_2_0.xml 1018B
antlr4_annotations_4_5.xml 311B
antlr4_4_5.xml 275B
compiler_2_1_3.xml 290B
android_android_24.xml 238B
commons_codec_1_10.xml 292B
juniversalchardet_1_0_3.xml 326B
guava_17_0.xml 409B
support_core_ui_24_2_0.xml 983B
.gitignore 105B
local.properties 425B
settings.gradle 16B
build.gradle 521B
共 84 条
- 1
资源评论
- guiyichen2017-11-19辛苦之作,多谢了
氦客
- 粉丝: 2w+
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功