Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin-删除片段的重复方法调用_Kotlin - Fatal编程技术网

Kotlin-删除片段的重复方法调用

Kotlin-删除片段的重复方法调用,kotlin,Kotlin,我试图通过创建一个采用params的单一方法来删除重复的方法。我有几个方法,它们创建一个类的实例,一个片段管理器,然后显示片段。我只是想知道如何将以下内容缩短为一个方法,并传入参数 private fun openAboutDialogue() { //get a fragment manager val fm = fragmentManager val abtDialogue = GetStartedFragment() abtDialogue.show(fm,

我试图通过创建一个采用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")
}

如果我正确理解了这一点,您只需创建如下内容,将
Fragment
作为参数:

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

从技术上讲,你可以做到

fun AppCompatActivity.openDialogue(fragment: DialogFragment, tag: String) {
    fragment.show(supportFragmentManager, tag)
}
但现在你必须称之为

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

如果您想对调用方隐藏片段类,可以使用枚举进行选择,该枚举也可以兼作片段标记:

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)
}    

最后,我希望能够调用任何片段类并显示它们的片段。看起来我仍然需要创建多个MethodsOry我在方法中使用了错误的变量名,将其更改为fragment。我认为这个方法实际上适用于任何片段?