首先要在app的build.gradle
加入:
dependencies {
implementation("androidx.fragment:fragment-ktx:1.3.6")
}
@MainThread inline fun <reified VM : ViewModel> Fragment.viewModels(
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
noinline factoryProducer: () -> ViewModelProvider.Factory = null
): Lazy<VM>
這個套件可以使我們直接透過
by activityViewModels()
或by viewModels()
取用ViewModel
。
by activityViewModels()
:取得fragment
所在的activity
的viewModel
class MyFragment : Fragment() {
val viewmodel: MyViewModel by activityViewModels()
//或者這樣寫
//val viewmodel: MyViewModel by activityViewModels()
}
by viewModels()
:取得fragment
的viewModel
class MyFragment : Fragment() {
val viewmodel: MyViewModel by viewModels()
}
fragment
間的頁面切換也可以從以往的:
supportFragmentManager.beginTransaction()
.addToBackStack("...")
.setCustomAnimations( R.anim.enter_anim, R.anim.exit_anim)
.replace(
R.id.fragment_container,
myFragment,
FRAGMENT_TAG
)
.commit()
改寫為:
supportFragmentManager.commit {
addToBackStack("...")
setCustomAnimations( R.anim.enter_anim, R.anim.exit_anim)
replace(
R.id.fragment_container,
myFragment,
FRAGMENT_TAG
)
}
在這邊只簡單列出幾個常用的方法,
如果有興趣研究更多可以看看官網喔。