gpt4 book ai didi

android - android项目的BaseFragment架构

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:06 27 4
gpt4 key购买 nike

我正在开始一个新项目,我将在一个由 10 名开发人员组成的团队中工作。我正在为我们的 Android 应用程序设置基本结构。当我与一个团队合作时,我希望每个人都遵循相同的结构,即为每个 fragment 创建 ViewModel 并使用数据绑定(bind)。如果开发人员不为他们的 Fragment 创建 ViewModel,我怎样才能让它变得严格,以便开发人员得到一个错误?

所以我创建了下面的 BaseFragment:

abstract class BaseFragment<out VM : BaseViewModel, DB : ViewDataBinding> : Fragment() {

open lateinit var binding: DB

private fun init(inflater: LayoutInflater, container: ViewGroup?) {
binding = DataBindingUtil.inflate(inflater, getLayoutRes(), container, false)
}

@LayoutRes
abstract fun getLayoutRes(): Int

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View {
init(inflater, container)
super.onCreateView(inflater, container, savedInstanceState)
return binding.root
}

open fun refresh() {}
}

如何改进它?

最佳答案

改进基本 fragment 的一种可能方法是像这样使用 reified:

protected inline fun <reified T : ViewModel> getViewModel(): T =
ViewModelProviders.of(this)[T::class.java]

调用是:

private val loginViewModel: LoginViewModel = getViewModel()

此方法的有用链接:http://www.albertgao.xyz/2018/05/22/3-ways-to-handle-view-model-creation-in-android-with-dagger-and-kotlin/

How does the reified keyword in Kotlin work?

https://proandroiddev.com/how-reified-type-makes-kotlin-so-much-better-7ae539ed0304

关于android - android项目的BaseFragment架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com