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