Как я могу уменьшить количество методов в моей активности в схеме MVP? - PullRequest
0 голосов
/ 11 июня 2019

Я создаю свое приложение в архитектуре MVP, и у меня возникают проблемы со многими функциями в моей деятельности и докладчике. Как я могу уменьшить количество методов?

Я уже слышал о некоторых решениях:

  • Разделите большого докладчика на более мелких, но тогда мне придется создать другие методы в своей деятельности для подключения докладчиков.
  • Создайте новый класс и создайте его экземпляр в моей деятельности, который бы реализовывал интерфейс View и требовал бы всех представлений, необходимых для управления докладчиками. Но я не убежден в этом решении. Я думаю, что это может добавить еще один беспорядок в мою архитектуру.

Есть ли у вас другие идеи или преимущества / недостатки по сравнению с описанным выше?

1 Ответ

0 голосов
/ 11 июня 2019

Существует больше, чем способ сократить методы из вашей Активность / Фрагмент

Один называется наследование , где вы можете расширить абстрактные методы в свой основной Activity / Fragment класс и управлять жизненным циклом оттуда.

Например, используя BaseActivity или BaseFragment , вы можете иметь более одного метода внутри него и просто расширить его на свой основной Activity или Fragment

BaseActivity.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 расширяет AppCompatActivity(), что означает, что вы можете управлять жизненным циклом вашего Activity в этом классе, а затем просто расширять его в своем основном 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
    }

Делая это, вы можете иметь более 1 метода вашего Activity внутри вашей BaseActivity , это уменьшит методы внутри вашего класса, которые наследуются от BaseActivity , также, если это нужно для работы с Fragments, просто расширьте Fragment вместо AppCompatActivity и создайте класс с именем BaseFragment

Кроме того, добавление интерфейса для операций просмотра и презентаций - отличный способ организации наших приложений. Вы можете взглянуть на пример, который я делаю для входа в систему Github

...