使用到了DataBinding+ViewModel+LiveData

这里是分数

小小遗憾就是撤回也只能撤回上一次的数据 但是完善这个功能不是重点

重点是。。jetpack的使用

package com.anguomob.jecpack.viewmodelimport androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelclass ScoreViewModel : ViewModel() {private lateinit var aTeamScore: MutableLiveData<Int>private lateinit var bTeamScore: MutableLiveData<Int>private var aLast: Int = 0private var bLast: Int = 0fun getATeamScore(): MutableLiveData<Int> {if (::aTeamScore.isInitialized.not()) {aTeamScore = MutableLiveData();aTeamScore.value = 0;}return aTeamScore;}fun getBTeamScore(): MutableLiveData<Int> {if (::bTeamScore.isInitialized.not()) {bTeamScore = MutableLiveData();bTeamScore.value = 0;}return bTeamScore;}fun addATeamAdd(score: Int) {saveLastScore()aTeamScore.value = aTeamScore.value?.plus(score)}fun addBTeamAdd(score: Int) {saveLastScore()bTeamScore.value = bTeamScore.value?.plus(score)}fun undo() {aTeamScore.value = aLast;bTeamScore.value = bLast;}fun reset() {aTeamScore.value = 0;bTeamScore.value = 0;}//记录上一次的分数private fun saveLastScore() {aLast = aTeamScore.value?.toInt() ?: 0bLast = bTeamScore.value?.toInt() ?: 0}
}

布局做了左右兼容。没有做上下兼容。我的意思是如果旋转屏幕那么就看出来了

<?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><variablename="viewModel"type="com.anguomob.jecpack.viewmodel.ScoreViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".activity.ScoreboardActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.5" /><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="40dp"android:text="Team A"android:textAppearance="@style/TextAppearance.AppCompat.Large"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.511"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textView5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="48dp"android:text="Team B"android:textAppearance="@style/TextAppearance.AppCompat.Large"app:layout_constraintBottom_toBottomOf="@+id/textView3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.424"app:layout_constraintStart_toStartOf="@+id/guideline6"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/team1Score"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="48dp"android:text="@{String.valueOf(viewModel.getATeamScore())}"android:textAppearance="@style/TextAppearance.AppCompat.Body1"android:textColor="@android:color/holo_red_dark"android:textSize="40sp"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.505"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView3" /><TextViewandroid:id="@+id/team2Score"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="48dp"android:text="@{String.valueOf(viewModel.getBTeamScore())}"android:textAppearance="@style/TextAppearance.AppCompat.Body1"android:textColor="@android:color/holo_green_dark"android:textSize="40sp"app:layout_constraintBottom_toBottomOf="@+id/team1Score"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline6"app:layout_constraintTop_toBottomOf="@+id/textView3" /><Buttonandroid:id="@+id/btTeam1Add1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:onClick="@{()->viewModel.addATeamAdd(1)}"android:text="+1"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/team1Score" /><Buttonandroid:id="@+id/btTeam1Add2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="+2"android:onClick="@{()->viewModel.addATeamAdd(2)}"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btTeam1Add1" /><Buttonandroid:id="@+id/btTeam1Add3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="+3"android:onClick="@{()->viewModel.addATeamAdd(3)}"app:layout_constraintEnd_toStartOf="@+id/guideline6"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btTeam1Add2" /><Buttonandroid:id="@+id/btTeam2Add1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="+1"android:onClick="@{()->viewModel.addBTeamAdd(1)}"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="@id/guideline6"app:layout_constraintTop_toBottomOf="@+id/team1Score" /><Buttonandroid:id="@+id/btTeam2Add2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="+2"app:layout_constraintEnd_toEndOf="parent"android:onClick="@{()->viewModel.addBTeamAdd(2)}"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="@id/guideline6"app:layout_constraintTop_toBottomOf="@+id/btTeam2Add1" /><Buttonandroid:id="@+id/btTeam2Add3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="60dp"android:text="+3"app:layout_constraintEnd_toEndOf="parent"android:onClick="@{()->viewModel.addBTeamAdd(3)}"app:layout_constraintHorizontal_bias="0.58"app:layout_constraintStart_toStartOf="@id/guideline6"app:layout_constraintTop_toBottomOf="@+id/btTeam2Add2" /><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btTeam1Add3"><ImageButtonandroid:id="@+id/ivRevoke"android:onClick="@{()->viewModel.undo()}"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_baseline_navigate_before_24"app:layout_constraintEnd_toStartOf="@+id/ivRestart"app:layout_constraintHorizontal_chainStyle="spread"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><ImageButtonandroid:id="@+id/ivRestart"android:onClick="@{()->viewModel.reset()}"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_baseline_restore_page_24"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/ivRevoke"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

如果想做加上上下的guideLine即可。这里不是重点

页面

package com.anguomob.jecpack.activityimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.anguomob.jecpack.R
import com.anguomob.jecpack.databinding.ActivityScoreboardBinding
import com.anguomob.jecpack.viewmodel.ScoreViewModelclass ScoreboardActivity : AppCompatActivity() {lateinit var binding: ActivityScoreboardBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = DataBindingUtil.setContentView(this, R.layout.activity_scoreboard)binding.viewModel =ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory(application)).get(ScoreViewModel::class.java)//设置dataBinding是否可以感知生命周期binding.setLifecycleOwner(this);}
}

页面里面几乎没有业务代码

高内聚。低耦合。
这不是开发者梦寐以求的追求吗。

setLifecycleOwner 这句话要写上哦。否则是不行的

Android jetpack 篮球计分板的实现相关推荐

  1. 篮球计分板课设,模块化LCD1602,数码管,矩阵按键,方便移植,使得主函数简洁明了

    适合普中的51开发板,也可以用与自己的课设,工程链接失效了记得1185956143@qq.com  代码,原理图PCB链接 http://链接:https://pan.baidu.com/s/1wlO ...

  2. Android Jetpack架构组件之 Room(使用、源码篇)

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...

  3. Android Jetpack组件之Hilt使用

    前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. And ...

  4. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  5. Android Jetpack组件之WorkManger使用介绍

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  6. Android Jetpack组件之Navigation使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  7. Android Jetpack组件之 Room使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  8. Android Jetpack组件之 Paging使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  9. Android Jetpack组件之 LiveData使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

最新文章

  1. 【C#实践】详解三层转七层:登录
  2. Vue精简版风格指南
  3. SAP S/4HANA生产排期scheduling profile配置
  4. php k线 形态识别,趋势追踪,从设计交易系统开始(七)——形态识别,不只有K线...
  5. css中变形,css3中变形处理
  6. html-下拉框、文本域、文件域
  7. Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)
  8. 如何把测试库的统计信息导入到生产库
  9. mac搭建apace和php开发环境
  10. 解决win7光驱驱动找不到的问题
  11. 独家揭秘!抖音爆款实时视频漫画变身特效背后技术
  12. 怎么使用biopython_Biopython - 简介
  13. CS1.6 网络参数 设置
  14. 【uni-app高级实战】手把手带你学习一个纯实战复杂项目的开发1/100
  15. vue 实现打印与批量分页打印功能
  16. PTA-- 快速排序(25)
  17. web入门 命令执行 web29-web41
  18. windows下安装spark
  19. 冷热电气多能互补的微能源网鲁棒优化调度(Matlab代码实现)
  20. 我所了解的JavaScript糟粕和鸡肋

热门文章

  1. anaconda的令牌是啥_Anaconda是什么?香吗?
  2. UVALive 3523 圆桌骑士
  3. 计算机主机接口有哪些,电脑主机后面的那些插孔,分别是插什么的
  4. Spring通过xml文件配置AOP,before、after、around、AfterThrowing、AfterReturning、Declare-parents
  5. matlab中for循环,while循环的基本使用。
  6. WGCNA包安装问题汇总
  7. 第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛H
  8. 十进制转为K进制代码的实现
  9. 如何在MAC上安装RocketMQ实现消息发送?
  10. 【聚类算法】什么是聚类