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
}
}); }
}
Android Studio 之 LiveData 的配合使用,底层数据变化,自动通知界面的更多相关文章
- Android Studio中获取sha1证书指纹数据的方法
高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio ...
- Android studio和Genymotion-VirtualBox的配合使用
Android Studio自带的模拟器实在是太慢了,对于我这种急性子来说简直...好了,我不想说脏话 那么我们就愉快的使用Genymotion好了 Android 开发最好的网站:http://ww ...
- Android studio教程:[2]项目整体布局
上篇介绍了如何创建项目,这一次将介绍创建完的项目如何呈现在开发者的眼前,介绍android studio开发环境的整体布局,让大家知道各个模块的位置和功能. 工具/原料 Android studio ...
- Android Studio奇淫巧技
目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Act ...
- Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧
这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap ...
- android studio 使用gradle 导出jar包,并打包assets目录
警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...
- Android Studio导入项目非常慢的解决办法
问题 Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势.然而在实际使用时,依然有不少不爽的地方 ...
- Android课程---Android Studio的一些小技巧
APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于一些维护很久的老项目比较有用,里面有很多无效的Resource, 删 ...
- Android课程---Android Studio安装及使用
2013年Google I/O 大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA 开发环境,旨在取代Eclipse和ADT(And ...
随机推荐
- windows中Crontab的使用
一.jdk的安装 安装地址ttps://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二 . ...
- robotframework-ride1.7.3.1更新安装
在2019年之前,robotframework-ride的版本一直是1.5.2.1,是2016年1月份的版本,里面需要使用 wxPython2.8-win64-unicode-2.8.12.1-py2 ...
- 【转载】UiPath,UiPath教程,UiPath视频教程 RPA
第一课-UiPath简介 第二课-变量和数据类型第1部分-基础讲解 第二课-变量和数据类型第2部分-实例讲解 第二课-流程控制第1部分-ifelse语句讲解 第二课-流程控制第3部分-高级流程控制语句 ...
- springmvc注解一
org.springframework.web.bind.annotation.RequestParam注解类型用于将指定的请求参数赋值给方法中 的形参 RequestParam注解 package ...
- MYSQL中的时间类型
时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time : “hh:mm:ss”格式表示的时间值,格式显示TIME值,但允许使用字符串或 ...
- Miniconda
什么是conda conda的基本使用方式 conda是一个开源包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换. 它适用于Linux,OS X和Windows,是 ...
- Linux命令passwd
passwd 简单说明:passwd命令的用法也很多,我们只选如下的几个参数加以说明:想了解更多,请参考man passwd或passwd --help :passwd [OPTION...] pas ...
- Linux操作系统之用户权限,重定向,文件管理
文件的权限 ls -al ----->隐藏文件会以 .号开头 ls -ld :显示目录自身属性 ls -i 显示文件的索引号----每个文件都有一个对应的号码 ls -r 逆序显示 dr-xr ...
- Qt编译报错:The kit Desktop Qt...has configuration issues which might be the root cause for this problem.
报错:Cannot find file: E:\实验室\20180409_Qt跑马灯\QtTest\QtTest.pro. 17:03:11: 进程"D:\Qt\Qt5.8.0\5.8\ms ...
- K-th Path CodeForces - 1196F
题目链接:https://vjudge.net/problem/CodeForces-1196F 题意:从图中找出第K短的最短路,最短路:从一个点到另一个的最短距离. 思路:题目说了,每两个点之间的边 ...