Android dataBinding 之 配合使用BaseAdapter適配器


Overview

數據綁定庫與 Android Gradle 插件捆綁在一起。您無需聲明對此庫的依賴項,但必須啟用它。
啟用的方法為:

在我們的app/build.gradle下添加如下代碼:

android{
    dataBinding{
        enabled=true
    }
}

如何在布局文件中使用

先是看看我們的代碼:

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

    <data>

        <variable
            name="user"
            type="com.example.android_databingding_learn.UserInfo" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#E3F2FD"
        android:orientation="vertical"
        android:paddingStart="3dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp"
            android:text="@{user.id}"
            android:textColor="@android:color/black"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/itemLayout_txtName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp"
            android:text="@{user.name}"
            android:textColor="@android:color/black"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp"
            android:text="@{user.gender}"
            android:textColor="@android:color/black"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp"
            android:text="@{user.age}"
            android:textColor="@android:color/black"
            android:textSize="16sp"
            android:textStyle="bold" />
    </LinearLayout>
</layout>

這樣我們的layout布局文件就完成了。
來分析一下:
Android DataBinding layout界面解析圖片
這樣我們的數據綁定等操作就完成了。

看看我們的適配器是如何操作的

/**
 * Date 5/3/2020
 * Author CaoJiaHao
 * Description DataBinding X BaseAdapter
 **/
public class MainAdapter extends BaseAdapter {
    private Context mContext;
    private List<UserInfo> usersList;

    public MainAdapter(Context mContext, List<UserInfo> usersList) {
        this.mContext = mContext;
        this.usersList = usersList;
    }

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

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

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

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        ItmeLayoutBinding binding;
        if (view == null) {
            binding = DataBindingUtil.inflate(LayoutInflater.from(this.mContext), R.layout.itme_layout, viewGroup, false);
            view = binding.getRoot();
            view.setTag(binding);

            //綁定我們的點擊事件
            view.findViewById(R.id.itemLayout_txtName).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, usersList.get(i).getName(), Toast.LENGTH_SHORT).show();
                }
            });
        } else {
            binding = (ItmeLayoutBinding) view.getTag();
        }
        binding.setVariable(BR.user, usersList.get(i));
        return view;
    }
}

這樣我們的操作就完成了。來分析一下:
Android Databinding 適配器解析一
Android Databinding 適配器解析二
這個就是我們的適配器代碼,其他的代碼和正常的適配器沒有啥區別。

如何使用這個適配器

使用他的話就和我們使用普通的適配器是一樣的。看看代碼:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    List<UserInfo> usersList = new ArrayList<>();
    int a = 30;
    for (int i = 0; i < a; i++) {
        UserInfo userInfo = new UserInfo(String.valueOf(i), "GreatCoder", "Male", "17");
        usersList.add(userInfo);
    }
    ListView listview = this.findViewById(R.id.main_ListVew);
    listview.setAdapter(new MainAdapter(this, usersList));
}

就是這么的簡單。看看我們的運行效果圖:

可以看到前面還有相關標識。

如何在綁定值中進行字符串拼接

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="3dp"
    android:text='@{@string/age+user.age}'
    android:textColor="@android:color/black"
    android:textSize="16sp"
    android:textStyle="bold" />

這個就是我所使用的方法。是引用string中的值。但是需要注意的是!
不推薦!!這樣去寫:

android:text='@{"年齡: "+user.age}'

為啥不推薦怎么寫?以為在DataBinding中如果出現錯誤,軟件不會指向錯誤的地方。后期排查工作量非常的大。

DataBinding的坑

  1. 在使用適配器的時候BR報錯或者是無法找到引用名稱如user。
    如何解決:
    就是注意我們的實體類的命名,名字的第一個字母需要大寫。不然你就會非常的難受,別問我為啥知道。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM