Kotlin Android 第16天,从 0 到 ML - MVVM架构 - ViewModel

前言:

   进入Android Jetpack 架构,还是要提一下什麽是MVVM,再来使用ViewModel。

大纲 :

MVVM

   View --------  View Model ------- Model
(Activity)       (View Model)       (DATA  --- API , SQL...)

View 
    负责使用者介面,UI 层显示,avtivity 和 fragment 都是

View Model
     负责接受处理 View 的请求和回覆资料

Model
    负责管理和更新资料,像是资料库存取,API 

https://ithelp.ithome.com.tw/upload/images/20210921/20121643wM03v6LkZ5.png

如何使用 ViewModel
1.build.gradle (app):

dependencies {
  ….
//ViewModel
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
}

2.建立class 宣告续承 ViewModel():

class Day16ViewModel: ViewModel() {
   init{ println("init Day16ViewModel")} 
}

3. Activity 呼叫 ViewModel

class Day16Activity : AppCompatActivity() {
    private lateinit var viewModel: Day16ViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_day16)

// Create a ViewModel the first time the system calls an activity's onCreate() method.
// Re-created activities receive the same Day16ViewModel instance created by the first activity.
// Use the 'by viewModels()' Kotlin property delegate
// from the activity-ktx artifact
    viewModel = ViewModelProvider(this).get(Day16ViewModel::class.java)
….
  }
}

4. Fragment呼叫 ViewModel:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // Use the 'by activityViewModels()' Kotlin property delegate
    // from the fragment-ktx artifact
    val model: Day16ViewModel by activityViewModels()
}

5. 这样就在activity 和 fragmnet 使用viewmodel 了

范例:

在 Activity 的 viewmodel 中设定字串为 “铁人赛主题”,给Activity 和 fragment 的viewmodel 读取字串显示在画面和log

执行结果:
https://ithelp.ithome.com.tw/upload/images/20210921/201216434jwcVEjpxe.png

https://ithelp.ithome.com.tw/upload/images/20210921/20121643Dk9ZKJwIL5.png

参考:

https://developer.android.com/topic/libraries/architecture/viewmodel


<<:  [Day6] [笔记] React Component (下)

>>:  Day 16:专案03 - PTT 八卦版爬虫01 | cookie

Day 22 : PyAutoGUI,自动控制滑鼠跟键盘!

今天来讲讲PyAutoGUI这个套件好了,这个套件可以帮助你写脚本,可以让滑鼠以及键盘自动化,就不用...

Day 3 | 游戏故事与世界观

游戏简介 我们制作的「山海异闻录」是一款AR手机游戏,一共有五个关卡,完成每个关卡即可开启新的故事剧...

30天轻松学会unity自制游戏-制作子弹

做完Player後先帮来上个简易武器吧,找到Player Bullet 0一样拖曳到场景,看是否需要...

【Day 9】Introduction - Practice 1

题目 美术馆有n 种票,票价为 p1、p2、p3 直到 pn,所需张数为 x1、x2、x3 直到 x...

【DAY 20】数据分析没有这麽难,透过 Microsoft Power BI ,让你事半功倍!(更多共享 Power BI 仪表板技巧)

哈罗大家好~ 昨天我们初步了解如何制作一个简单的 Power BI 视觉化报表,让我们可以针对想要了...