在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. codeblocks “can't find compiler executable in yourconfigured search ……”

    新安装的codeblocks 16.01,安装后打开提示如下,没法用..原因是编译器并没有找对自己安装的 mingw 的安装位置. 解决办法:如下图点击 Auto-detect 之后,会看到位置信息变 ...

  2. C++中sort函数小结

    我们都知道,sort函数是C++标准库<algorithm>中的一个库函数.它的功能是对数组/容器中的元素进行排序.用法示例如下: 一.对数组进行排序 示例: int a[] = {1,3 ...

  3. 计时器setInterval()

    在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互时间:周期性执行或调用表达式之间的 ...

  4. kubernetes k8s yum localinstall

    localinstall 是安装在本地的rpm包顺便解决依赖关系 yum localinstall docker-common-1.12.6-68.gitec8512b.el7.centos.x86_ ...

  5. android设置系统横屏方案

    效果如下: 实现方案: 1.ChangeOrientationService.java /** * @描述 强制旋转屏幕服务 * @作者 tll * @时间 2018/1/5 */ public cl ...

  6. Android应用启动会白屏一下的解决办法

    设置透明样式,如下:<activity android:name="com.hongfans.cvi.ui.MainActivity" android:configChang ...

  7. vue todolist 1.0

    <template> <div id="app"> <input type="text" v-model='todo' /> ...

  8. Calling async method synchronously

    https://stackoverflow.com/questions/22628087/calling-async-method-synchronously/22629216#22629216 ht ...

  9. MySql 引擎

    存储引擎: 存储引擎就是指表的类型以及表在计算机上的存储方式 它处于MySQL体系架构中Server端底层,是底层物理结构的实现,用于将数据以各种不同的技术方式存储到文件或者内存中,不同的存储引擎具备 ...

  10. Java 日志

    Java日志: 参考博客:http://www.importnew.com/16331.html 当日志中包含满足特定条件的记录时,触发相应的通知机制,或者在程序运行出现错误时,快速的定位潜在的问题源 ...