我在MVP架构中构建了我的应用,但是我在活动和演示者中的许多功能遇到了麻烦。如何减少方法计数?
我已经听说过一些解决方案:
关于上述一种方法,您还有其他想法或优点/缺点吗?
答案 0 :(得分:0)
除了减少活动/片段
中的方法之外,还有其他方法一个称为继承,您可以在其中将抽象方法扩展到主 Activity / Fragment 类中,并从那里管理生命周期。
例如,使用 BaseActivity 或 BaseFragment ,您可以在其中包含多个方法,并将其扩展到您的主要Activity
或{{1 }}
Fragment
}
此 BaseActivity 扩展了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
}
,这意味着您可以在此类中管理AppCompatActivity()
的生命周期,然后只需在主要{{1 }},当您执行此操作时, BaseActivity 内部的所有功能都将应用于您的Activity
类,如果要更改或覆盖某些内容,只需从该抽象类中调用方法
Activity
这样做,您可以在 BaseActivity 中拥有多个MainActivity
方法,这将减少类中从 BaseActivity 继承的方法同样,如果您需要使用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
而不是Fragments
即可创建一个名为 BaseFragment
此外,添加用于查看操作和演示者操作的界面是组织我们的应用程序的一种好方法,您可以看一下我在Github上登录时使用的示例