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);
    }
}

 

posted @ 2021-12-02 13:58  涂妖教  阅读(85)  评论(0)    收藏  举报