首页 > 解决方案 > 如何在 MVP 模式下减少我的活动中的方法计数?

问题描述

我在 MVP 架构中构建了我的应用程序,但我的活动和演示者中的许多功能都遇到了问题。如何减少方法计数?

我已经听说过一些解决方案:

您对上述一个有其他想法或优点/缺点吗?

标签: androidmvpandroid-mvp

解决方案


从您的活动/片段中减少方法的方法不止一种

一种称为继承,您可以将抽象方法扩展到主Activity/Fragment类并从那里管理生命周期。

例如,使用BaseActivityBaseFragment您可以在其中拥有多个方法,只需将其扩展到您的 mainActivityFragment

基本活动.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
    }

这样做,您可以ActivityBaseActivity中有多个方法,这将减少类中从BaseActivity继承的方法,此外,如果您需要使用它Fragments,只需扩展Fragment而不是AppCompatActivity创建一个名为BaseFragment的类

此外,添加视图操作和演示者操作的界面是组织我们的应用程序的好方法,您可以查看我在Github上为登录所做的示例


推荐阅读