Android dataBinding 之 配合使用BaseAdapter适配器

Overview

绑定适配器负责发出相应的框架调用来设置值。例如,设置属性值就像调用 setText() 方法一样。再比如,设置事件监听器就像调用

setOnClickListener() 方法。

数据绑定库允许您通过使用适配器指定为设置值而调用的方法、提供您自己的绑定逻辑,以及指定返回对象的类型。

看看如何实现的吧

首先我们看一下我们的item.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.example.databinding_demo.UserInfoEntity" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{user.name+user.gender}"
            android:textColor="@android:color/holo_blue_light" />

    </LinearLayout>
</layout>

我们先是创建了一个UserInfoEntity的实体类。里面就两个属性,这里就不贴代码了。

然后我们可以看到我们这里使用的ListView控件中的子布局。他绑定的就是我们的UserInfoEntity然后里面的TextView绑定的是我们的name 和 gender.

这里如果你有数据绑定的基础做起来还是非常的简单的。

然后我们看一下如何根据数据绑定创建一个BaseAdapter的适配器。

按照惯例先看看代码:

public class ItemAdapter extends BaseAdapter {
    List<UserInfoEntity> usersItem = new ArrayList<>();
    private Context context;

    public ItemAdapter(List<UserInfoEntity> usersItem, Context context) {
        this.usersItem = usersItem;
        this.context = context;
    }

    @Override
    public int getCount() {
        return this.usersItem.size();
    }

    @Override
    public Object getItem(int i) {
        return this.usersItem.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ItemBinding dataBinding;
        if (view == null) {
            dataBinding = DataBindingUtil.inflate(LayoutInflater.from(this.context), R.layout.item, viewGroup, false);
            view = dataBinding.getRoot();
            view.setTag(dataBinding);
        } else {
            dataBinding = (ItemBinding) view.getTag();
        }

        dataBinding.setVariable(BR.user,usersItem.get(i));
        return view;
    }
}

这里可以看到就是getView方法和普通的适配器不一样。

好~接着看一下如何使用吧:

首先我们实例化一个Binding。

然后将我们的Binding绑定到我们的View中去。但是在这个之前我们需要判断一个view是否为空 。

然后通过绑定Tag来实现。

最后我们需要通过设置dataBinding的变量来完成数据绑定。

现在我们的适配器完成了。然后看看如何使用我们的适配器吧。

显示看一下界面代码:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:id="@+id/main_ListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

然后是我们的活动逻辑代码:

public class MainActivity extends AppCompatActivity {

private ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    List<UserInfoEntity> usersList = new ArrayList<>();
    int a = 30;
    for (int i = 0; i < a; i++) {
        usersList.add(new UserInfoEntity("Jia Hao", "Male"));
    }
    binding.mainListView.setAdapter(new ItemAdapter(usersList, MainActivity.this));
}

}

首先需要实例化我们的活动数据绑定的dataBinding然后初始化数据,最后使用binding进行数据绑定,在这个期间不需要使用任何的控件初始换,可以说是非常的方便。

这样我们的适配器就调用成功了。非常简单。

原文地址:https://www.cnblogs.com/cao-1/p/12657802.html

时间: 2024-10-06 23:05:46

Android dataBinding 之 配合使用BaseAdapter适配器的相关文章

Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器

一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适配器. 二.深入了解: 1.什么是适配器? 适配器:在安卓中,顾名思义就是把数据变成符合界面风格的形式,并且通过ListView显示出来.也就是说适配器是数据和界面之间的桥梁. 适配器在数据库中的数据(后台)和显示页面(前端)中充当一个转换器的角色,数据库中的数据(如数组,链表,数据库,集合等)通过

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

设计模式笔记之三:Android DataBinding库(MVVM设计模式)

本博客转自郭霖公众号:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650236908&idx=1&sn=9e53f42e18a81795ef0cfe6fe3959ec2&scene=24&srcid=0910cK3vXJpNzY0CO28i1Qhs#wechat_redirect 什么是MVVM 说到DataBinding,就有必要先提起MVVM设计模式.Model–View–ViewModel(MVV

Android DataBinding库(MVVM设计模式)

说到 DataBinding,就有必要先提起 MVVM设计模式. Model–View–ViewModel(MVVM) 是一个软件架构设计模式,相比 MVVM,大家对 MVC 或 MVP 可能会更加熟悉. MVC:(VIew-Model-Controller) 早期将 View.Model.Controller 代码块进行划分,使得程序大部分分离,降低耦合. MVP:(VIew-Model-Presenter) 由于 MVC 中 View和Model之间的依赖太强,导致 Activity 中的代

Android Databinding:再见Presenter,你好ViewModel

原文链接: ANDROID DATABINDING: GOODBYE PRESENTER, HELLO VIEWMODEL! MVP(Model-View-Presenter)近来成为Android应用的UI层架构设计中主要的设计模式.例如Ted Mosby,Nycleus和Mortar 等框架都引入Presenters来帮助你的应用构建一个整洁的架构(clean architecture).他们也在不同程度上帮助你解决Android平台上的设备旋转和状态保持等问题.这虽然和MVP不直接相关,但

Android必学之数据适配器BaseAdapter

.什么是数据适配器? 下图展示了数据源.适配器.ListView等数据展示控件之间的关系.我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的.数据适配器正是建立了数据源与ListView之间的适配关系,将数据源转换为ListView能够显示的数据格式,从而将数据的来源与数据的显示进行解耦,降低程序的耦合性.这也体现了Android的适配器模式的使用.对于ListView.GridView等数据展示控件有多种数据适配器,本文讲解最通用的数据适配器——BaseAdap

Android适配器之基于BaseAdapter定义AbslistView万能适配器

为统一数据相关操作,现给出数据处理相关操作的接口定义,其中包含对列表数据的增删改查等常规操作. /** * Created by Administrator on 2016/4/19. * 适配器的数据修改方法的定义 */public interface IAdapterDataModifyHelper<T> { /** * 通知适配器更新界面 * * @param INotifyDataSetChange*/void setNotifyAdapterDataSetChange(INotify

跟我学Android之十一 列表和适配器

本章内容 第1节  列表类视图概述 第2节  列表视图ListView 第3节  下拉视图Spinner 本章目标 理解MVC模式的设计思想. 了解AdapterView 的继承关系图. 掌握掌握使用各类适配器显示列表数据. 掌握列表视图ListView的用法. 掌握下拉视图Spinner的用法. 列表控件是界面设计中一种常用的控件 u主要用于展现一系列数据项供用户选择或浏览,比如: ?收件箱中的邮件标题列表 ?通讯录中的联系人列表 ?注册用户时的城市选择列表 uAndroid系统中提供了多种形

Android日记-SimpleAdapter和BaseAdapter

SimpleAdapter 这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图.你可以指定由Map组成的List(比如ArrayList)类型的数据.在ArrayList中的每个条目对应List中的一行. Maps包含每一行的数据.你可以指定一个XML布局以指定每一行的视图,根据Map中的数据映射关键字到指定的视图. 如果设置了SimpleAdapter.ViewBinder,那么这个设置的ViewBinder的setViewValue(android.view.View, Ob