android - 如何在 MVP 模式下减少我的活动中的方法计数?
问题描述
我在 MVP 架构中构建了我的应用程序,但我的活动和演示者中的许多功能都遇到了问题。如何减少方法计数?
我已经听说过一些解决方案:
- 将一个大演示者拆分为较小的演示者,但随后我必须在我的活动中为演示者连接创建另一种方法。
- 创建一个新类并在我的活动中创建它的实例,该实例将实现 View 接口并需要管理演示者所需的所有视图。但我不相信这个解决方案。我认为这可能会给我的架构添加另一个混乱。
您对上述一个有其他想法或优点/缺点吗?
解决方案
从您的活动/片段中减少方法的方法不止一种
一种称为继承,您可以将抽象方法扩展到主Activity/Fragment类并从那里管理生命周期。
例如,使用BaseActivity或BaseFragment您可以在其中拥有多个方法,只需将其扩展到您的 mainActivity
或Fragment
基本活动.kt
abstract class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
super.onCreate(savedInstanceState)
setContentView(getLayout())
}
@LayoutRes
abstract fun getLayout(): Int
fun Context.toast(message: String?, toastDuration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this, message, toastDuration).show()
}
override fun onDestroy() {
super.onDestroy()
//Do here what you want
}
override fun onStop() {
super.onStop()
//Do here what you want
}
override fun onStart(){
super.onStart()
//Do here what you want
}
override fun onPause() {
super.onPause()
//Do here what you want
}
override fun onRestart() {
super.onRestart()
//Do here what you want
}
}
这个BaseActivity extends AppCompatActivity()
,这意味着你可以管理你Activity
在这个类中的生命周期,然后,只需在你的 main 中扩展它Activity
,当你这样做时,你BaseActivity中的所有功能都将应用于你的MainActivity
类,如果你想更改或覆盖某些内容,只需调用该抽象类中的方法。
MainActivity.kt
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//You dont need setContentView since we do all the configuration in the BaseActivity
toast("This is a message with a toast since we implemented thi into the BaseActivity we do not need to do toasts all over again")
}
override fun getLayout(): Int {
return R.layout.activity_login_view
}
//For example, if you want to override the functionallity from a method inside your BaseActivity you can implement it like always
override fun onRestart() {
super.onRestart()
//Replace what BaseActivity onRestart() does
}
这样做,您可以Activity
在BaseActivity中有多个方法,这将减少类中从BaseActivity继承的方法,此外,如果您需要使用它Fragments
,只需扩展Fragment
而不是AppCompatActivity
创建一个名为BaseFragment的类
此外,添加视图操作和演示者操作的界面是组织我们的应用程序的好方法,您可以查看我在Github上为登录所做的示例
推荐阅读
- flutter - 如何在flutter中实现shuflle动画?
- ios - 如何在 iOS 应用中播放 .oga 或 .ogg 文件?
- mysql - 需要 SSL 证书时连接到 mysql 的 JDBC 连接字符串是什么?
- c# - 从控制器 MVC 更改数据库
- android - java.lang.IllegalStateException:应为 BEGIN_OBJECT,但在第 1 行第 13571 列是 BEGIN retrofit_ARRAY
- javascript - 在 React JS 中,当其中一个输入字段发生更改时如何从多个输入字段中获取值
- jmeter - 当我的脚本不满足条件时,我想使 Beanshell 采样器失败
- javascript - 如何避免 WebGL 中内表面的透明度?
- reactjs - 创建反应应用 pwa 打字稿模板无法检测到服务工作者
- java - 为什么我在 Netbeans 中的 JFrame 文件无法加载主类?