序言
将运用的页面数据和页面(Activity
/Fragment
)分离出来能够让你能够更好地遵照我们前面探讨的单一义务标准。activity 和 fragment 负责对主视图和信息制作到屏上,而 ViewModel
是负责存放并处理页面所需要的所有信息。
数据信息自变量从 XXFragment
挪到 XXViewModel
类
- 将它们自变量
score
、currentWordCount
、currentScrambledWord
挪到XXViewModel
类。
class XXViewModel : ViewModel() {
private var score = 0
private var currentWordCount = 0
private var currentScrambledWord = "test"
...
一定要注意这种特性只对
ViewModel
由此可见,页面没法对它进行浏览
需要处理该问题,就不可以把这些属性可视性修饰符设成 public
,不该让数据可以被其他类别改动。由于外部类很有可能便以不符主视图分析中指定游戏的规则的意料外方法对业务作出变更。外部类很有可能会将 score
改为别的不正确数值。
在 ViewModel
以内,数据信息应可改动,数据信息应设成 private
和 var
。但在 ViewModel
以外,数据信息应可载入但并不能改动,因而数据信息可作为 public
和 val
公布。要实现此个人行为,Kotlin 带来了称之为储备属功能。
储备特性
应用储备特性,能从 getter 回到准确目标以外的一些其他内容。
Kotlin 架构能为每一个特性形成 getter 和 setter。
针对 getter 和 setter 方式,能够更换其中一个方式或与此同时更换2个方式,同时提供自定个人行为。要实现储备特性,必须更换 getter 方式以回到写保护版本数据信息。储备特性实例:
private var _count = 0
val count: Int
get() = _count
举例说明来讲,在运用中,必须应用数据只对 ViewModel
由此可见:
在 ViewModel
类以内:
_count
特性设成private
且可变性。因而,必须要在ViewModel
类上对其浏览和调整。国际惯例是为了private
特性添加下划线作为前缀。
在 ViewModel
类以外:
- Kotlin 里的默认设置可视性修饰符为
public
,因而count
是公共属性,可以从页面控制板等其他类别对它进行浏览。因为仅有get()
方式能被更换,因此此特性不能变并且是写保护情况。当外部类浏览此特性时,他会回到_count
数值并且其值没法改动。这能够防止外部类私自对ViewModel
里的应用数据开展危险的变更,但容许外界调用方快速地浏览该应用数据数值。
将储备特性导入到 currentScrambledWord
- 在
XXViewModel
中,变更currentScrambledWord
申明以添加一个储备特性。如今,必须要在XXViewModel
上对_currentScrambledWord
开展浏览和调整。页面控制板XXFragment
可以用只读属性currentScrambledWord
载入该值。
private var _currentScrambledWord = "test"
val currentScrambledWord: String
get() = _currentScrambledWord
- 在
XXFragment
中,升级updateNextWordOnScreen()
方式以应用写保护的viewModel
特性currentScrambledWord
。
private fun updateNextWordOnScreen() {
binding.textViewUnscrambledWord.text = viewModel.currentScrambledWord
}
- 在
XXFragment
中,删掉onSubmitWord()
和onSkipWord()
方式里的编码。稍候你将完成这个方法。如今,您应该可以出不来不恰当地编译代码了。
留意:勿公布 ViewModel
里的可变性数据项,保证不能从其他类别改动此数据信息。ViewModel
里的可变数据应自始至终设成 private
文中已经参与「」
本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!