Kotlin - Удалить повторяющиеся вызовы методов для фрагментов. - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь удалить дублирующие методы, создав один единственный метод, который принимает params.У меня есть несколько методов, которые делают точную вещь, где они создают экземпляр класса, менеджер фрагментов, а затем показывают фрагмент.Просто хочу узнать, как я могу сократить следующее в один метод и просто передать в параметрах.

private fun openAboutDialogue() {
    //get a fragment manager
    val fm = fragmentManager
    val abtDialogue = GetStartedFragment()
    abtDialogue.show(fm, "About the App")
}

private fun openNewRouteDialogue() {
    val confirmNewDialogue = NewRouteFragment()
    val fm = fragmentManager
    confirmNewDialogue.show(fm, "NewRoute")
}

private fun openEndRouteDialogue() {
    val confirmEndDialogue = TrafficDataFragment()
    val fm = fragmentManager
    confirmEndDialogue.show(fm, "GetTraffic")
}

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Технически вы могли бы сделать

fun AppCompatActivity.openDialogue(fragment: DialogFragment, tag: String) {
    fragment.show(supportFragmentManager, tag)
}

Но теперь вы должны назвать это как

openDialogue(GetStartedFragment(), "About the App")
openDialogue(NewRouteFragment(), "NewRoute")
openDialogue(TrafficDataFragment(), "GetTraffic")
0 голосов
/ 01 июня 2018

Если вы хотите придумать и скрыть класс Fragment от вызывающей стороны, вы можете использовать enum для выделения, который также может удваиваться как тег фрагмента:

enum class DialogueType{ GET_STARTED, NEW_ROUTE, TRAFFIC,DATA }

private fun openDialogue(type: DialogueType){
    val fragment = when(type) {
        GET_STARTED -> GetStartedFragment()
        NEW_ROUTE -> NewRouteFragment()
        TRAFFIC_DATA -> TrafficDataFragment()
    } 
    fragment.show(fragmentManager, type.name)
}    
0 голосов
/ 31 мая 2018

Если я правильно понимаю, вы просто создаете что-то вроде следующего, которое принимает Fragment в качестве аргумента:

private fun openDialogue(fragment: Fragment, text: String) =
    fragment.show(fragmentManager, text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...