Kotlin - 删除片段

时间:2018-05-30 21:32:38

标签: kotlin

我试图通过创建一个采用参数的单一方法来删除重复方法。我有一些方法可以完成他们创建类的实例,片段管理器,然后显示片段。只是想知道我如何将以下内容简化为一种方法,然后传入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 :(得分:0)

如果我理解这一点,你只需创建类似下面的内容,以Fragment为参数:

private fun openDialogue(fragment: Fragment, text: String) =
    fragment.show(fragmentManager, text)

答案 1 :(得分:0)

从技术上讲,你可以做到

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

但现在你必须将其称为

openDialogue(GetStartedFragment(), "About the App")
openDialogue(NewRouteFragment(), "NewRoute")
openDialogue(TrafficDataFragment(), "GetTraffic")

答案 2 :(得分:0)

如果你想从调用者那里得到幻想并隐藏Fragment类,你可以使用枚举进行选择,它也可以兼作片段标记:

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)
}    
相关问题