• Android Studio 之 LiveData 的配合使用,底层数据变化,自动通知界面


    Android Studio 之 LiveData 的配合使用,底层数据变化,自动通知界面

    viewModelWithLikeData.getLikeNumber().observe(this, new Observer<Integer>() {
                @Override
                public void onChanged(Integer integer) {
                    textView.setText(String.valueOf(integer));
                }
            });
    

    通过 ViewModel 对象方法的 observe  onChanged事件,自动对界面上的控件,进行数据更新

    1.ViewModel类

      创建 对象 MutableLiveData<Integer> likeNumber

       创建 这个对象的 GET  、 SET 方法

    package com.example.livedatatest;
    
    import androidx.lifecycle.MutableLiveData;
    import androidx.lifecycle.ViewModel;
    
    public class ViewModelWithLikeData extends ViewModel {
        private MutableLiveData<Integer> likeNumber;
    
        //用构造函数,防止访问到的内容是空的,不能这样用,不知道为什么,会出错
        /*
        ViewModelWithLikeData(){
            likeNumber = new MutableLiveData<>();
            likeNumber.setValue(0);
        }
       */
    
        public MutableLiveData<Integer> getLikeNumber() {
            if(likeNumber==null) {
                likeNumber = new MutableLiveData<>();
                likeNumber.setValue(0);
            }
            return likeNumber;
        }
    
        public void setLikeNumber(MutableLiveData<Integer> likeNumber) {
            this.likeNumber = likeNumber;
        }
    
        public void addLikeNumber(int n) {
            likeNumber.setValue(likeNumber.getValue()+n);
        }
    }
    

      

    2. Activity 类

        创建 ViewModel 对象,实例化对象

        对 ViewModel 对象的 observe onChanged 事件进行监控,如有变化,就自动给控件赋值! 

    
    
    package com.example.livedatatest;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ImageButton;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProviders;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
        ViewModelWithLikeData viewModelWithLikeData;
        TextView textView;
        ImageButton imageButton1;
        ImageButton imageButton2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            textView = findViewById(R.id.textView);
            imageButton1 = findViewById(R.id.imageButton);
            imageButton2 = findViewById(R.id.imageButton2 );
    
            //注意: ViewModelProviders 必须在 build.gradle 中引入如下语句,否则导入不了类
            //implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
            viewModelWithLikeData = ViewModelProviders.of(this).get(ViewModelWithLikeData.class);
    
            //设置一个监听器,当这个值有变化时,自动给控件赋值。
    
            viewModelWithLikeData.getLikeNumber().observe(this, new Observer<Integer>() {
                @Override
                public void onChanged(Integer integer) {
                    textView.setText(String.valueOf(integer));
                }
            });
    
            imageButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    viewModelWithLikeData.addLikeNumber(1);  //点赞加1
                }
            });
    
            imageButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    viewModelWithLikeData.addLikeNumber(-1); //踩-1
                }
            });
    
        }
    }
    

      

  • 相关阅读:
    Python虚拟开发环境pipenv
    挖矿木马的应急响应
    熟悉使用ConfigParser库读写配置文件
    Django的RestfulAPI框架RestFramework
    使用DnsCat反弹shell
    使用mimikatz获取和创建Windows凭据的工具和方法
    拿下主机后内网的信息收集
    iOS 新浪微博-5.0 首页微博列表
    xcode 各版本下载地址及其它工具下载地址
    iOS 新浪微博-4.0 OAuth授权
  • 原文地址:https://www.cnblogs.com/gfwei/p/11779342.html
Copyright © 2020-2023  润新知