3. jetpack-------Data Binding(界面与代码的解耦,简洁明快)

  老写button = findViewById()之类的太费劲了,而且还容易出错,并且后期我们的页面不可能一成不变,页面改变意味着很多地方要改变,这种情况咋办?用 DataBinding解决。

  想用DataBingding就得在build.gradle的Android中添加一句话。别忘了syc now

dataBinding{
        enabled true
    }

  之后去布局文件中,点一下布局,会出来个小灯泡

 

 

  点一下小灯泡,convert to data bind layout

MyViewModel      点击按钮数字增加

package com.example.localization;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {

    private MutableLiveData<Integer> number;

    public MutableLiveData<Integer> getNumber() {
        if (number == null){
            number = new MutableLiveData<>();
            number.setValue(250);
        }
        return number;
    }

    //功能函数
    public void addNumber(){
        number.setValue(number.getValue() + 1);
    }

}

activity_main

<?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="data66"
            type="com.example.localization.MyViewModel" />
    </data>

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


        <TextView
            android:id="@+id/textView66"
            android:layout_width="166dp"
            android:layout_height="78dp"
            android:text="@{String.valueOf(data66.number)}"
            android:textAlignment="center"
            android:textSize="34sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.497"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.176" />

        <Button
            android:id="@+id/button66"
            android:layout_width="86dp"
            android:layout_height="79dp"
            android:onClick="@{()->data66.addNumber()}"
            app:icon="?android:attr/textSelectHandle"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.535"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

 

Main

package com.example.localization;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;

import com.example.localization.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    MyViewModel myViewModel ;
    TextView textView;
    Button button;

    /*布局文件转换为data binding layout之后
    AndroidStduio会为我们自动创建一个跟我们类名一样的对象
    */
    ActivityMainBinding binding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //改一下这个
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);


        myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); //这是老写法
        /*********************************双向绑定,观察数据***************************************/
        binding.setData66(myViewModel);
        binding.setLifecycleOwner(this);

    }

}    

 

posted @ 2021-09-27 15:57  涂妖教  阅读(152)  评论(0)    收藏  举报