2. jetpack-----LiveData(感知数据的变化,自动刷新界面)

  LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

  自动刷新数据。

 

写一个点赞和踩的功能

MyViewModelLiveData

package com.example.localization;

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

public class MyViewModelWithLiveData extends ViewModel{

    private MutableLiveData<Integer> likedNumber;

    public MutableLiveData<Integer> getLikedNumber() {
        //最好get的时候如果为空就new一下  其实不写也行吧
        if (likedNumber == null){
            likedNumber = new MutableLiveData<>();
            likedNumber.setValue(250);
        }
        return likedNumber;
    }

    public void addLikedNumber(int n) {
        likedNumber.setValue(likedNumber.getValue()+n);
    }
}

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.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;

public class MainActivity extends AppCompatActivity {

    MyViewModelWithLiveData modelWithLiveData;
    TextView textView;
    Button likeButton;
    Button dislikeButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化各种button以及textview
        likeButton = findViewById(R.id.button);
        dislikeButton = findViewById(R.id.button3);
        textView = findViewById(R.id.textView);

        /*********************************数据观察***************************************/
        //获得ViewModelProvider的实例
        modelWithLiveData = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModelWithLiveData.class);
        //当我们在ViewModelWithLiveData中的数据发生变化的时候就会调用该函数
        modelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
            @Override
            public void onChanged(Integer integer) {
                textView.setText(String.valueOf(integer));
            }
        });

        /*********************************点赞按钮功能**************************************/
        likeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点赞数加一
                modelWithLiveData.addLikedNumber(1);
            }
        });
        /*********************************踩 按钮功能**************************************/
        dislikeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点赞数减一
                modelWithLiveData.addLikedNumber(-1);
            }
        });



    }

}

 

posted @ 2021-09-27 14:39  涂妖教  阅读(462)  评论(0)    收藏  举报