android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack VIII BindingConversion
android data binding jetpack VII @BindingAdapter
android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack IV 绑定一个方法另一种写法和参数传递
android data binding jetpack III 绑定一个方法
android data binding jetpack II 动态数据更新
android data binding jetpack I 环境配置 model-view 简单绑定
来实现一个recyclerview绑定。
看了例子理一下思路。

第一个关系:
item 与itemview 数据与展示绑定。
recyclerview 更新数据和UI过程是:获取holder类型->产生holder->获取holder()->holder+data->展示。
代码在adapter中执行。
1.获取某个位置的holder类型。
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
2.创建holder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return viewHolder;
}
3.绑定数据并展示出来。
@Override
public void onBindViewHolder(ViewHolder holder, int position) { }
现在使mvvm 那么
第一步:在createholder的时候要确定 binding 与xml的绑定关系。
第二步:在onBindViewHolder中让关系实现并展示。
看示例代码怎么实现第一步
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//读取xml对内存
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
//建立绑定关系
ViewDataBinding binding = DataBindingUtil.inflate(inflater, layoutId, parent, false);
//建立一下holder
ViewHolder viewHolder = new ViewHolder(binding.getRoot());
//把绑定关系记录在holder的变量里。
viewHolder.setBinding(binding);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//执行绑定,给绑定关系设置数据。
holder.getBinding().setVariable(brId,mDatas.get(position));
//让绑定生效。
holder.getBinding().executePendingBindings();
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="com.ht.jetpack.model.Student" /> <variable
name="student"
type="Student" />
</data> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"> <ImageView
android:layout_width="280dp"
android:layout_height="210dp"
android:layout_margin="10dp"
android:scaleType="centerCrop"
app:studentAvatar="@{student.resId}" /> <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:gravity="center"
android:text="@{student.name}"
android:textSize="18sp" /> </LinearLayout>
</layout>
xml是绑定关系。
整个过程:加xml->产生绑定关->滚动到某个位置->获取绑定关系,给绑定加入数据->展示
声明的变量:

给变量赋值:

brId是
就是xml里声明的模型变量。
难点:

这个之前没有见过。自定义了一个属性,进行了绑定。
具定实现在这儿:

这个需要求单独一下块内容去学习。
看一下运行效果:

以下是实例代码:要运行请自己找几张图加到drawable里命名一致就可以了。
package com.ht.jetpack.adapter; import android.databinding.BindingAdapter;
import android.widget.ImageView; public class BindingUtil { @BindingAdapter("bind:studentAvatar")
public static void showImageByUrl(final ImageView imageView, int resId) {
imageView.setImageResource(resId);
}
}
package com.ht.jetpack.adapter; import android.content.Context;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager; public class InitRecyclerView { public static void initLinearLayoutVERTICAL(Context context, RecyclerView recyclerView) {
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
} public static void initLinearLayoutWithoutDivid(Context context, RecyclerView recyclerView) {
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
} public static void initLinearLayoutHorizontal(Context context, RecyclerView recyclerView) {
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
} public static void initStaggered(Context context, RecyclerView recyclerView) {
StaggeredGridLayoutManager sgm = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(sgm);
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
}
package com.ht.jetpack.adapter; import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup; import java.util.List; /**
* Created by hongtao
*/
public class MySimpleAdapter<T> extends RecyclerView.Adapter<ViewHolder>{ private List<T> mDatas; private int layoutId; private int brId; public MySimpleAdapter(List<T> mDatas, int layoutId, int brId) {
this.mDatas = mDatas;
this.layoutId = layoutId;
this.brId = brId;
} @Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
} @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(inflater, layoutId, parent, false);
ViewHolder viewHolder = new ViewHolder(binding.getRoot());
viewHolder.setBinding(binding);
return viewHolder;
} @Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.getBinding().setVariable(brId,mDatas.get(position));
holder.getBinding().executePendingBindings();
} @Override
public int getItemCount() {
return mDatas == null ? 0 : mDatas.size();
}
}
package com.ht.jetpack.adapter; import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.View; /**
* Created by hongtao .
*/
public class ViewHolder extends RecyclerView.ViewHolder { private ViewDataBinding binding; public ViewDataBinding getBinding() {
return binding;
} public void setBinding(ViewDataBinding binding) {
this.binding = binding;
} public ViewHolder(View itemView) {
super(itemView);
}
}
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.show_list);
InitRecyclerView.initLinearLayoutWithoutDivid(this, recyclerView);
List<Student> students = new ArrayList<>();
Student student = new Student(R.drawable.tx2, "Kate");
students.add(student);
student = new Student(R.drawable.tx3, "tom");
students.add(student);
student = new Student(R.drawable.tx4, "Johnson");
students.add(student);
student = new Student(R.drawable.tx5, "Make");
students.add(student);
MySimpleAdapter<Student> adapter = new MySimpleAdapter<>(students, R.layout.student_item, BR.student);
recyclerView.setAdapter(adapter);
在main layout里声明
<android.support.v7.widget.RecyclerView
android:id="@+id/show_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/navigation"
android:layout_below="@id/tv"
android:scrollbars="vertical" />
android data binding jetpack V 实现recyclerview 绑定的更多相关文章
- android data binding jetpack IV 绑定一个方法另一种写法和参数传递
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack I 环境配置 model-view 简单绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VIII BindingConversion
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VII @BindingAdapter
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VI 清理一些概念。BR 运算表达式
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack II 动态数据更新
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack III 绑定一个方法
第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的. 1.绑定方法可以用主语法.也可以用以下双冒号方式“::” android:onClick="@{pr ...
- android data binding jetpack VIIII 第一坑
<LinearLayout android:id="@+id/ll_item_home_page_pics" android:layout_width="wrap_ ...
- Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
随机推荐
- vue 项目中如何在页面刷新的状态下保留数据
1.问题:在vue项目中,刷新页面之后,我当前打开的所有菜单,都消失,我如何实现刷新之后页面仍然是刷新之前的状态 效果图: 解决方法: 使用vuex作状态管理: 将vuex里面的数据同步更新到loca ...
- 【0】Zookeeper Q&A
1.Observer角色如何配置? Zookeeper集群中的中的Leader和Follower角色是由服务器启动时期的Leader选举产生的,Observer不参与选举,此角色的节点需要在配置文件z ...
- Mount Windows (CIFS) shares on Linux with credentials in a secure way
Posted on 09/09/2014 In almost all cases, when mounting a CIFS-share on a Linux host, you will nee ...
- 【转】Linux设置和查看环境变量的方法
转: http://www.jb51.net/LINUXjishu/77524.html 1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量 ...
- 【转】草根老师的 linux字符设备驱动详解
Linux 驱动 之 模块化编程 Linux 驱动之模块参数和符号导出 Linux 设备驱动之字符设备(一) Linux 设备驱动之字符设备(二) Linux 设备驱动之字符设备(三)
- ora-01847:月份中日的值必须介于 1 和当月最后一日之间
今天解决了一个奇葩问题: ORA-01847: 月份中日的值必须介于 1 和当月最后一日之间 将数据从一个视图倒入到一个同结构的表中,但是老报错,也就那么几个字段,肉眼真看不出来什么问题,但是既然报这 ...
- Codeforces 1082 毛毛虫图构造&最大权闭合子图
A #include<bits/stdc++.h> using namespace std; typedef long long ll; , MAXM = ; //int to[MAXM ...
- 平衡搜索树-B树。
B Tree 系列 摘录: https://blog.csdn.net/v_JULY_v/article/details/6530142 B+树介绍 B+树的几点介绍 动态查找树有: 二叉查找树,自平 ...
- Cloneable测试
一.Cloneable 的用途 Cloneable和Serializable一样都是标记型接口,它们内部都没有方法和属性,implements Cloneable表示该对象能被克隆,能使用Obje ...
- C# class 浅拷贝 与 深拷贝
MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象.如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型,则复制引用但 ...