在Android开发中使用列表呈现数据的情况很多,现在我们常用RecyclerView呈现列表,为了开发敏捷和代码优雅,我们现在来打造<?xml version="1.0" encoding="utf-8"?>

本文使用 dataBinding 数据绑定,不会的小伙自己去学习下吧

一、dataBinding配置,在build.gradle添加dataBinding配置,如下图所示

二、CommAdapter代码如下:

  

package com.rx.baseadapter;

import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import java.util.List; /**
* author:puxiaobo
* email:ggband520@163.com
* date:2017/11/20
* desc: RecyclerView 公用Adapter;
*/ public abstract class CommAdapter<T> extends RecyclerView.Adapter<CommAdapter.ViewHolder> { private int brId;//databinding 实体ID 在布局文件定义
private List<T> datas;
private int itemRes;//itemView 布局文件
private OnItemClickListener listener;
private ViewDataBinding viewDataBinding; /**
*
* @param datas 数据
* @param brId 实体ID 在布局文件定义
* @param itemRes item布局资源ID
*/
protected CommAdapter(List<T> datas, int brId, int itemRes) {
this.datas = datas;
this.brId = brId;
this.itemRes = itemRes;
} @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), itemRes, parent, false);
ViewHolder viewHolder = new ViewHolder(viewDataBinding.getRoot());
viewHolder.setViewDataBinding(viewDataBinding);
return viewHolder;
} @Override
public void onBindViewHolder(CommAdapter.ViewHolder holder, int position) {
if (brId != -1)
holder.getViewDataBinding().setVariable(brId, datas.get(position));
bindViewItemData(holder.getViewDataBinding(), position, datas.get(position), holder);
} @Override
public int getItemCount() {
return datas == null ? 0 : datas.size();
} protected class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ViewDataBinding viewDataBinding; public void setViewDataBinding(ViewDataBinding viewDataBinding) {
this.viewDataBinding = viewDataBinding;
} public ViewDataBinding getViewDataBinding() {
return viewDataBinding;
} public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
viewDataBinding = (ViewDataBinding) itemView.getTag(); } @Override
public void onClick(View v) {
if (listener != null)
listener.onItemClick(v, getLayoutPosition());
}
} public void setDatas(List<T> datas) {
this.datas = datas; } public void setOnItemClickListener( OnItemClickListener onItemClickListener) {
this.listener = onItemClickListener;
} public abstract void bindViewItemData(ViewDataBinding binding, int position, T t, ViewHolder holder); /**
* item点击事件
*/
public interface OnItemClickListener {
void onItemClick(View item, long position);
}
}

三、item布局文件view_fine_balance_item.xml

  

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
name="monRecord"
type="com.rx.baseadapter.MonRecord" /> </data> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"> <ImageView
android:id="@+id/im_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="8dip"
android:layout_marginTop="8dip"
android:src="@mipmap/ic_launcher" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/im_icon"
android:orientation="vertical"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dip"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dip"
android:orientation="horizontal"> <TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@{monRecord.title}"
android:textSize="17sp" /> <TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="@{monRecord.createdate}"
android:textSize="12sp" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </layout>

四、测试布局文件activity_main.xml

  

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.rx.baseadapter.MainActivity"> <android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </RelativeLayout>

五、使用 CommAdapter MainActivity

  

package com.rx.baseadapter;

import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<MonRecord> monRecords; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init(); } private void init() {
recyclerView = findViewById(R.id.rv);
initData();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new CommAdapter<MonRecord>(monRecords, BR.monRecord, R.layout.view_fine_balance_item) { @Override
public void bindViewItemData(ViewDataBinding binding, int position, MonRecord monRecord, CommAdapter.ViewHolder holder) {
/**
* 这里可以扩展需求 (绑定数据)
*/ // ViewFineBalanceItemBinding itemBinding = (ViewFineBalanceItemBinding)binding;
// itemBinding.imIcon.setImageResource(R.mipmap.ic_launcher); }
}); } private void initData() { monRecords = new ArrayList<>(); MonRecord monRecord = null; for (int i = 0; i < 20; i++) {
monRecord = new MonRecord();
monRecord.setBalance(25.4f);
monRecord.setCreatedate("2017-08-09 08:34:55");
monRecord.setPaymoney(32.76f);
monRecord.setTitle("消费提示");
monRecords.add(monRecord);
} } } 六、效果图
 

  

RecyclerView通用适配器的更多相关文章

  1. RecyclerView的通用适配器,和滚动时不加载图片的封装

    对于RecyclerView我们需要使用RecyclerAdapter,使用方式与ListViewAdapter类似,具体代码大家可以在网上搜索,这里就只教大家使用封装后的简洁RecyclerAdap ...

  2. RecyclerView的通用适配器

    本来这一个主题应该早就写了,只是项目多,属于自己的时间不多,所以现在才开动!! 前一段时间写了一篇文章,是关于ListView,GriView万能适配器,没有看过的同学,可以先看看那篇文章,然后在来学 ...

  3. listview-android:打造万能通用适配器(转)

    转载:https://blog.csdn.net/q649381130/article/details/51781921: 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  4. ListView ,GridView 通用适配器

    前言 接近半年的时间没有写博客了,今年公司的项目有点多,比较忙,没时间写,这是其一.其次是,这半年来,有时间的时候,我都会看看自己以前写的博客,也许是以前刚刚写博客,经验不足,感觉写出来的博客质量很不 ...

  5. Android教你怎样一步步打造通用适配器

    前言 在Android开发中ListView是最为经常使用的控件之中的一个,基本每一个应用都会涉及到它,要使用ListView列表展示,就不可避免地涉及到另外一个东西--Adapter,我们都知道,A ...

  6. Android开发进阶 -- 通用适配器 CommonAdapter

    在Android开发中,我们经常会用到ListView 这个组件,为了将ListView 的内容展示出来,我们会去实现一个Adapter来适配,将Layout中的布局以列表的形式展现到组件中.     ...

  7. RecyclerView 通用 Adapter

    先看使用方法

  8. 似曾相识的 RecyclerView

    一.常用方法 RecyclerView 与 ListView.GridView 类似,都是可以显示同一种类型 View 的集合的控件. 首先看看最简单的用法,四步走: ①接入 build.gradle ...

  9. RecyclerView全面解析

    写在前面 起深入浅出这名字的时候我是慎重又慎重的,生怕被人骂标题党,写的什么破玩意还敢说深入浅出.所以还是请大家不要抱着太高的期望,因为没有期望就没有失望,就像陈润说的,超预期嘛.全当看小说的心情来看 ...

随机推荐

  1. PByte和PChar的关系

    作为指针是相同的, 解析的内容,稍微有点区别. var s:String;P:PChar;B:PByte;a:Integer;begin  s:='1234';  P:=PChar(s);//按chr ...

  2. Android的路径信息[转]

    Delphi早就把IO相关的都提取到System.IoUtils单元中了. 路径操作就使用TPath的方法都很方便.usesSystem.IoUtilsTPath.GetTempPath//临时目录T ...

  3. 多线程练习,深刻体会了一次变量的BUG.

    package ltb20180106; public class TestBankThread { private int deposit=0;//注意全局变量的摆放. public TestBan ...

  4. Java中sleep方法和wait的详细区别

    1.两者的区别 对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. 这两个方法来自不同的类分别是Thread和Object 最主要是 ...

  5. adb调试android设备 说的比较清楚的一篇文章

    ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...

  6. tomcat整体架构

    1.背景 Tomcat作为JavaWeb领域的Web容器,目前在我们淘宝也使用的也非常广泛,现在基本上所有线上业务系统都是部署在Tomcat上.为了对平时开发的Web系统有更深入的理解以及出于好奇心对 ...

  7. mysql 数据库排序规则

    MySQL中的排序规则.在新建MySQL数据库或表的时候经常会选择字符集和排序规则.数据库用的字符集大家都知道是怎么回事,那排序规则是什么呢? 排序规则:是指对指定字符集下不同字符的比较规则.其特征有 ...

  8. eclipse基于git上传项目到码云上

    此文章只讲如何把项目上传到码云上面,前提是你的项目已经用git创建好了. 关于如何用git创建项目,请读者见我博客的另一篇文章. 继续:右键点击ssm [ssm master]项目-->选择Te ...

  9. Notepad++ 中使用tail -f功能

    想要notepad++中有tail -f的功能吗? 可以如下配置 Settings > Preferences > MISC 在 File Status Auto-Detection下 “ ...

  10. 阿里云ECS安装flannel启动问题

    在阿里云ECS安装flannel,安装过程可以在网上找文章,这样的文章很多.我这里讲一下启动flannel遇到的两个问题的解决方法. 1,network.go:102] failed to retri ...