ViewModel+LivaData+DataBinding 一个篮球计分器小例子

MyViewModel.class
package com.example.databinding03; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { //A 队分数 MutableLiveData<Integer> aTeamScore; //A 队分数 MutableLiveData<Integer> bTeamScore; //以下两个方法只要打一个get就会自动提示出来 public MutableLiveData<Integer> getaTeamScore() { if (aTeamScore == null){ aTeamScore = new MutableLiveData<>(); aTeamScore.setValue(0); } return aTeamScore; } public MutableLiveData<Integer> getbTeamScore() { if (bTeamScore == null){ bTeamScore = new MutableLiveData<>(); bTeamScore.setValue(0); } return bTeamScore; } public void addAScore(int score){ aTeamScore.setValue(aTeamScore.getValue() + score); } public void addBScore(int score){ bTeamScore.setValue(bTeamScore.getValue() + score); } }
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="fuck" type="com.example.databinding03.MyViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.15" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_begin="201dp" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.3" /> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="A队" android:textSize="60sp" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textView2" android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="B队" android:textSize="60sp" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/textView" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/scoreA" android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="@{String.valueOf(fuck.getaTeamScore())}" android:textSize="48sp" app:layout_constraintBottom_toTopOf="@+id/guideline4" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline2" /> <TextView android:id="@+id/scoreB" android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="@{String.valueOf(fuck.getbTeamScore())}" android:textSize="48sp" app:layout_constraintBottom_toTopOf="@+id/guideline4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toBottomOf="@+id/textView2" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.45" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.6" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.75" /> <Button android:id="@+id/buttonA1" android:layout_width="136dp" android:layout_height="63dp" android:layout_marginTop="24dp" android:text="+1" android:onClick="@{()->fuck.addAScore(1)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline5" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintHorizontal_bias="0.523" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline4" /> <Button android:id="@+id/buttonB1" android:layout_width="136dp" android:layout_height="76dp" android:layout_marginTop="28dp" android:text="+1" android:onClick="@{()->fuck.addBScore(1)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline5" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.459" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline4" app:layout_constraintVertical_bias="0.0" /> <Button android:id="@+id/buttonA2" android:layout_width="130dp" android:layout_height="69dp" android:layout_marginTop="20dp" android:text="+2" android:onClick="@{()->fuck.addAScore(2)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline6" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintHorizontal_bias="0.478" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline5" /> <Button android:id="@+id/buttonB2" android:layout_width="130dp" android:layout_height="71dp" android:layout_marginTop="16dp" android:text="+2" android:onClick="@{()->fuck.addBScore(2)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline6" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline5" /> <Button android:id="@+id/buttonA3" android:layout_width="131dp" android:layout_height="72dp" android:text="+3" android:onClick="@{()->fuck.addAScore(3)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline7" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline6" /> <Button android:id="@+id/buttonB3" android:layout_width="134dp" android:layout_height="69dp" android:text="+3" android:onClick="@{()->fuck.addBScore(3)}" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline7" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline6" /> <ImageView android:id="@+id/imageView" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline7" app:srcCompat="@drawable/ic_baseline_tram_24" /> <ImageView android:id="@+id/imageView2" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline7" app:srcCompat="@drawable/ic_baseline_usb_24" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
MainActivity.class
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); MyViewModel myViewModel = new ViewModelProvider(this,new ViewModelProvider .AndroidViewModelFactory(getApplication())) .get(MyViewModel.class); //给前端传一个ViewModel activityMainBinding.setFuck(myViewModel); //有这个数据才能有效 activityMainBinding.setLifecycleOwner(this); } }
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号