数据绑定DataBinding

437 阅读1分钟

Activty中使用DataBinding

第一步:在app的build.gradle中增加下面的代码,并且Sync Now(同步)

dataBinding{
    enabled = true
}

第二步:然后activity_main.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.mvvpdemo.bean.User" />
    </data>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.mName}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.mAge}" />
    </LinearLayout>
</layout>

第三步:MainActivity中的内容如下:

package com.example.mvvpdemo;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import com.example.mvvpdemo.bean.User;
import com.example.mvvpdemo.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);

        //获取到布局文件
        //这个类名根据avtivity对应的layout名,加个binding自动生成
        //比如此处布局文件为:activity_main 转换为类型为 MainActivityBinding
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        // 给布局文件赋值
        User user2 = new User("张三", "User");
        binding.setUser(user2);
    }
}

Fragment中使用DataBinding

fragment 中使用DataBinding 和 Activity 中不同,使用的是DataBindingUtil.inflate 形成binding,然后通过binding.root方法形式View。

class LeftFragment : Fragment() {

    private lateinit var binding: FragmentLeftBinding;

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = DataBindingUtil.inflate<FragmentLeftBinding>(
            inflater,
            R.layout.fragment_left,
            container,
            false
        )
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btn.setOnClickListener { 
            
        }
    }

}

可能出现的问题

juejin.cn/post/710741…