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

  

Android Studio 之 LiveData 的配合使用,底层数据变化,自动通知界面的更多相关文章

  1. Android Studio中获取sha1证书指纹数据的方法

    高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio ...

  2. Android studio和Genymotion-VirtualBox的配合使用

    Android Studio自带的模拟器实在是太慢了,对于我这种急性子来说简直...好了,我不想说脏话 那么我们就愉快的使用Genymotion好了 Android 开发最好的网站:http://ww ...

  3. Android studio教程:[2]项目整体布局

    上篇介绍了如何创建项目,这一次将介绍创建完的项目如何呈现在开发者的眼前,介绍android studio开发环境的整体布局,让大家知道各个模块的位置和功能. 工具/原料 Android studio ...

  4. Android Studio奇淫巧技

    目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Act ...

  5. Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

    这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap ...

  6. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

  7. Android Studio导入项目非常慢的解决办法

    问题 Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势.然而在实际使用时,依然有不少不爽的地方 ...

  8. Android课程---Android Studio的一些小技巧

    APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于一些维护很久的老项目比较有用,里面有很多无效的Resource, 删 ...

  9. Android课程---Android Studio安装及使用

    2013年Google I/O 大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA 开发环境,旨在取代Eclipse和ADT(And ...

随机推荐

  1. 很带劲,Android9.0可以在i.MX8开发板上这样跑

    米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑A ...

  2. XSS挑战之旅---游戏通关攻略

    最近发现一个有趣的XSS闯关小游戏,游戏的作者是先知社区的大佬Mramydnei,喜欢XSS的大家可以一起来学习交流. 现在我把自己在前面的十八关里面的闯关过程记录一下,大神绕行,我是菜鸟,大家可以一 ...

  3. mongoDB看这篇就够了

    写在前面 hello,小伙伴们,我是 pubdreamcc ,本篇文章依旧出至于我的 GitHub仓库 node学习教程 ,如果你觉得我写的还不错,欢迎给个 star ,小伙伴们的 star 是我持续 ...

  4. AI面试-算法结构基础

    其实目前国内几乎只要是技术岗,面试中都100%会问算法和数据结构. 这两者能快速体现候选人真实的水平,比如代码量,代码的质量,性能,思维是否有逻辑,是否灵活. 算法结果概述 1.前言 1.应用范围:机 ...

  5. 一、MySQL基础知识

    一.背景介绍 我们每天都在访问各种网站.APP,如微信.QQ.抖音,今日头条等,这些东西上面都存在大量的信息,这些信息都需要有地方存储,存储在哪里呢?数据库. 所有我们需要开发一个网站.APP,数据库 ...

  6. nginx 日志整理 目录区分 日志配置

    Nginx日志对于统计.系统服务排错很有用,但是原始的配置方案,日志很难定位问题.因此设想将nginx日志分类,包括access及error日志.并且按照不同域名及日志进行分类. 配置nginx日志目 ...

  7. Nginx + PHP 修改单次请求 最大执行时间

    1.  php.ini  (usr/local/php/etc) max_execution_time = 2. php-fpm.conf  (usr/local/php/etc) request_t ...

  8. Java下载文件解决中文乱码问题

    直接上代码 /** * @desc 下载已存在的文件 */ public void sendFile(HttpServletRequest request, HttpServletResponse r ...

  9. Linux指令(压缩和解压类)

    gzip/gunzip 指令 gzip用于压缩文件,gunzip用于解压基本语法: gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip文件.gz (功能描述:解压缩文件命 ...

  10. SQL注入(2)

    SQL注入id  title  content  time  author select * from news where id = 1; select 1,2,3,4,5,6 from table ...