iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Mobile Development

聽說 HackMD 開放 API 串接,那麼用 Kotlin 寫個筆記 App 吧!系列 第 15

111/15 - 資料綁定(1/2) - ViewModel、Layout 改寫

  • 分享至 

  • xImage
  •  

開頭

頁面畫完後,因為我們要資料綁定的關係,所以要對 Layout 做一些改變

安裝套件

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"

建立 ViewModel

  • 如果不需要 Context,可以繼承 ViewModel()

     class NoteViewModel: ViewModel() {     
         init {
             Log.d("maho", "ViewModel")
         }
    
         override fun onCleared() {
             super.onCleared()
             Log.d("maho", "NoteViewModel onCleared")
         }
     }
    
  • 如果需要 Context,可以繼承 AndroidViewModel(application),用getApplication<Application>()

    class NoteViewModel(application: Application): AndroidViewModel(application) {
        init {
            Log.d("maho", "NoteViewModel")
        }
    
        override fun onCleared() {
            super.onCleared()
            Log.d("maho", "NoteViewModel onCleared")
        }
    }
    

數據綁定相關

Gradle 啟動

android {
    buildFeatures {
        dataBinding true
    }
}

Layout 改寫

  1. 把原本最上面和最下面的CoordinatorLayout改成layout
    • 原本
      <androidx.coordinatorlayout.widget.CoordinatorLayout
          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"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
      
          ...
      
      </androidx.coordinatorlayout.widget.CoordinatorLayout>
      
    • 修改後
      <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">
      
          <androidx.coordinatorlayout.widget.CoordinatorLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent">
      
              ...
      
          </androidx.coordinatorlayout.widget.CoordinatorLayout>
      </layout>
      
  2. 增加<data>,然後增加剛剛新增的NoteViewModel
    <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>
    
            <variable
                name="NoteViewModel"
                type="com.example.hacknote.note.NoteViewModel" />
        </data>
    
    
        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            ...
    
        </androidx.coordinatorlayout.widget.CoordinatorLayout>
    </layout>
    

上一篇
111/14 - 建立筆記頁面(1/1)
下一篇
111/16 - 資料綁定(2/2) - ViewModelFactory、LiveData
系列文
聽說 HackMD 開放 API 串接,那麼用 Kotlin 寫個筆記 App 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言