Comments (5)
- 可以共用,比如这个 SquareUIModel 在很多个页面都可以使用。主要看页面的具体视图逻辑了。
- DialogFragment 的话就参考 BaseVMFragment 使用呗。没有 viewModel 也就没有必要继承 BaseVMFragment 了,BaseFragment 就行。
from wanandroid.
- 可以共用,比如这个 SquareUIModel 在很多个页面都可以使用。主要看页面的具体视图逻辑了。
- DialogFragment 的话就参考 BaseVMFragment 使用呗。没有 viewModel 也就没有必要继承 BaseVMFragment 了,BaseFragment 就行。
第二点 我感觉哈 不是一个好思路,每次新增加一个像BaseDialogFragment 的 ,写一个泛型是ViewModel的,在写一个没有ViewModel的 。修改工作量也是double 。我感觉像BaseActivity 和BaseFragment 这种的不用任何泛型 ,继承之后 在子类初始化ViewModel 或者DataBinding?望大佬指点一下!
from wanandroid.
@bingdu0 我最初的 BaseVMActivity 是继承 BaseActivity 的,公用逻辑都写在 BaseActivity,不会存在 double 工作量。但是后来新版本的 ViewModel 必须在 onCreate() 之后进行初始化,调用链就成了这样,initView() -> initData() -> initVM()
,initVM 之前使用 viewModel 会产生空指针。索性就不继承 BaseActivity 了。
至于你说的修改工作量 double ,我觉得可以尽量避免修改。Kotlin 的扩展函数足以让我们不去修改 BaseActivity 源码。
如果觉得还是不妥的话,依然可以让 BaseVMXXX 去继承 BaseXXX 。
from wanandroid.
@bingdu0 我最初的 BaseVMActivity 是继承 BaseActivity 的,公用逻辑都写在 BaseActivity,不会存在 double 工作量。但是后来新版本的 ViewModel 必须在 onCreate() 之后进行初始化,调用链就成了这样,
initView() -> initData() -> initVM()
,initVM 之前使用 viewModel 会产生空指针。索性就不继承 BaseActivity 了。至于你说的修改工作量 double ,我觉得可以尽量避免修改。Kotlin 的扩展函数足以让我们不去修改 BaseActivity 源码。
如果觉得还是不妥的话,依然可以让 BaseVMXXX 去继承 BaseXXX 。
private fun initVM() {
providerVMClass()?.let {
mViewModel = ViewModelProviders.of(this).get(it)
lifecycle.addObserver(mViewModel)
}
}
open fun providerVMClass(): Class<VM>? = null
override fun onDestroy() {
lifecycle.removeObserver(mViewModel)
super.onDestroy()
}
我可能没说清楚,初始化VM 放到子类去初始化,
伪代码如下
private val mViewModel2: SquareViewModel by lazy {
ViewModelProvider(requireActivity(), SquareViewModelFactory(SquareRepository())).get(SquareRepository::class.java)
}
这样是不是就没必要在BaseActivity 通过泛型来来初始化了?另外 lifecycle.addObserver(mViewModel) 和 lifecycle.removeObserver(mViewModel) 有 起作用吗?
from wanandroid.
- VM 的初始化,做法比较多。google 的 plaid 应用使用 dagger2 进一步解耦。
@Inject
lateinit var viewModel: LoginViewModel
当然你的做法也是可以的。架构上的东西,不违背大原则,顺手就行。
- 谢谢你的提醒。鉴于项目中直接使用了
viewmodel-ktx
库为 ViewModel 提供的viewModelScope
协程作用域,lifecycle.addObserver(mViewModel) 和 lifecycle.removeObserver(mViewModel) 现在的确没有起到什么作用。
from wanandroid.
Related Issues (20)
- 大佬我看你代码里面使用了databinding啊 HOT 2
- 我使用你的代码,发现超时不起作用 HOT 1
- 有很多重复代码,很多地方封装的不好 HOT 1
- 这个项目的混淆文件有吗? HOT 2
- 为什么网络接口返回的不是 Call<*> ? HOT 2
- 关于把网络请求丢在Repository层 HOT 3
- retrofit2相关问题
- 异常处理的问题 HOT 1
- buildSrc 这个文件夹是怎么自动生成的?? 懵=,= HOT 1
- buildSrc 一直找不到依赖 HOT 3
- Failed resolution of: [Lkotlin/reflect/KProperty; HOT 1
- 如果viewPager2中fragment较多,此时切换fragment会执行生命周期方法onDestroy.此时viewModel会执行clear方法,导致fragment切换回来后协程为cancelled状态,无法继续调用接口
- 请问下buildSrc这个library是怎么创建的?
- 线程堆栈大小调整 HOT 2
- 找不到下面的4个文件。 HOT 3
- README文档似乎有些滞后于代码了 HOT 1
- 文件找不到
- Gradle sync failed: could not find extension implementation class org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager HOT 1
- 不再更新了吗?
- 你这项目自定义输出目录为何没报错,我的会导致output-metadata.json HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wanandroid.