El uso de DataBinding uno

I. Introducción

DataBindingEs JetPackuna biblioteca para el enlace bidireccional, que puede desacoplar los datos y la interfaz de usuario. Aquí hay un registro simple de su uso.

2. Configuración del entorno

También es necesario agregar complementos y bibliotecas dependientes para usar en la versión anterior anterior DataBinding, pero por ahora, no necesita ser tan complicado, solo build.gradleuna configuración simple en . Hay dos métodos de configuración, como sigue:

método uno:

android {
    
    
        ...
        dataBinding {
    
    
            enabled = true
        }
    }
    

Método dos:

 android {
    
    
        ...
     buildFeatures {
    
    
            dataBinding = true
            //viewBinding = true
        }
 }

3. Convierta un diseño existente en un diseño de enlace de datos

Si queremos usar el enlace de datos, el diseño debe usar el siguiente formato:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">
        <data>
            <variable
                name="viewmodel"
                type="com.myapp.data.ViewModel" />
        </data>
        <ConstraintLayout... /> <!-- UI layout's root element -->
    </layout>
    

<layout></layout>Puede ver que hay más etiquetas que el diseño anterior . La etiqueta interior se <data></data>puede omitir si la operación de asignación no se utiliza en la práctica. Si cambiamos manualmente a este diseño, será un poco más problemático. El oficial proporciona una manera simple.

Primero, debe usar el método anterior para habilitar la función de enlace de datos. Luego use la tecla de método abreviado en el diseño (MAC use Alt+Enter), la tecla de método abreviado se puede llamar en cualquier espacio en blanco antes de la línea 6
inserte la descripción de la imagen aquí

Después de seleccionar y confirmar, se convertirá en el siguiente código

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>

    </data>

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

        <Button
            android:id="@+id/show_dialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="弹出一个对话框"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/update_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            app:layout_constraintTop_toBottomOf="@+id/show_dialog"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            tools:text="value" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Cuarto, enlace de datos

Modifique el código anterior para el enlace de datos

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>
        <variable
            name="change"
            type="String" />
    </data>

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

        <Button
            android:id="@+id/show_dialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="弹出一个对话框"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/update_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@{change}"
            app:layout_constraintTop_toBottomOf="@+id/show_dialog"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            tools:text="value" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

MainActivity.kt

class MainActivity : AppCompatActivity() {
    
    
    private val binding: ActivityMainBinding by lazy {
    
    
        ActivityMainBinding.inflate(layoutInflater)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        binding.showDialog.setOnClickListener {
    
    
            LoginDialog().show(supportFragmentManager,"")
        }
        binding.change = "啦啦啦"
    }
}

Puede ver que el diseño genera una ActivityMainBindingclase. Al modificar esta clase, changepuede modificar directamente el contenido de la interfaz de usuario.

Cinco, archivo de enlace de datos

JetPack tiene enlace de vista y enlace de datos. El enlace de vista guarda la findViewById()operación, y el enlace de datos puede asignar datos directamente. Los archivos DataBinding se generan de las siguientes maneras

La primera forma:

private val binding: ActivityMainBinding by lazy {
    
    
        ActivityMainBinding.inflate(layoutInflater)
    }

Segunda forma:

val binding: ActivityMainBinding = DataBindingUtil.setContentView(
                this, R.layout.activity_main)

Si está utilizando elementos vinculados a datos en o Fragmenten un adaptador. Se pueden utilizar las siguientes formas:ListViewRecycleView

    val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
    // or
    val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)

A veces no sabemos el tipo de hormigón a unir. En este momento, puede usar los siguientes métodos para enlazar

    val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent)
    val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)

Si el diseño se aumenta utilizando otros mecanismos, se puede vincular por separado de la siguiente manera:

    val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)

¿Cuándo se usará este método, como el uso de etiquetas <include>, <ViewStub>etc. en el diseño? O necesita agregar el diseño dinámicamente. se puede usar de esta manera

Variables dinámicas:
A veces, el sistema no conoce una clase de vinculación específica. Por ejemplo, ejecutar contra un diseño arbitrario RecyclerView.Adapterno conoce la clase de enlace específica. El valor vinculante aún debe especificarse al llamar al onBindViewHolder()método .

En el siguiente ejemplo, RecyclerViewtodos los diseños están obligados a tener una variable de elemento. BindingHolderLos objetos tienen un getBinding()método que devuelve ViewDataBindingla clase base.

    override fun onBindViewHolder(holder: BindingHolder, position: Int) {
    
    
        item: T = items.get(position)
        holder.binding.setVariable(BR.item, item);
        holder.binding.executePendingBindings();
    }

Nota : la biblioteca de vinculación de datos genera una clase denominada BR en el paquete del módulo que contiene el ID del recurso utilizado para la vinculación de datos. En el ejemplo anterior, la biblioteca genera automáticamente la variable BR.item.

Para obtener esta explicación, consulte https://blog.csdn.net/cunchi4221/article/details/107478770
https://blog.csdn.net/mountain_eyes/article/details/80627037

6. Enlace de referencia

  1. Primeros pasos | Desarrolladores de Android | Desarrolladores de Android

Supongo que te gusta

Origin blog.csdn.net/Mr_Tony/article/details/124199278
Recomendado
Clasificación