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); } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号