【发布时间】:2019-07-31 15:52:08
【问题描述】:
我在使用源集时遇到了一些问题,我有一个包含大部分通用代码的主源集,但是之前的开发人员包含了一个构建风格开关,例如:
if (Application.inKiosk) {
navigation.visibility = View.INVISIBLE
val employeeSelectionFragment = EmployeeSelectionFragment()
employeeSelectionFragment.setAllList(employees)
employeeSelectionFragment.setCallback(employeeSelected)
supportFragmentManager.beginTransaction().add(R.id.small_container, employeeSelectionFragment, "EmployeeSelectionFragment").commitNow()
currentTimeRecord = TimeRecord()
} else {
setupTimeRecords(employees!!.first()!!.id, savedInstanceState == null)
}
我想提取此风味特定块并将其包含在其自己的源集文件夹中。我无法访问通用成员,例如导航。我将如何提取此部分?
navigation.visibility = View.INVISIBLE
val employeeSelectionFragment = EmployeeSelectionFragment()
employeeSelectionFragment.setAllList(employees)
employeeSelectionFragment.setCallback(employeeSelected)
supportFragmentManager.beginTransaction().add(R.id.small_container, employeeSelectionFragment, "EmployeeSelectionFragment").commitNow()
currentTimeRecord = TimeRecord()
【问题讨论】:
-
在某个类中创建
fun setupKioskMode(navigation: View, supportFragmentManager: FragmentManager): TimeRecord。使用您想要的实现(例如,上面的代码)在每个特定于风味的源集中创建该类的实现。让main源集从您的if块调用setupKioskMode(),在上面显示的第一个sn-p 中。 -
大家好,感谢您的建议,但有什么办法可以摆脱主源集中的 if (Application.inKiosk) { } 吗?
-
啊,好的。在这种情况下,您的函数将具有其他名称 (
setupWhatever()) 并具有附加参数(对于您传递给setupTimeRecords()的那些东西)。一个源集将使用您的Application.inKiosktrue场景实现该功能;另一个会打电话给setupTimeRecords()。您的main源集将用对setupWhatever()的调用替换整个if/else,并且将根据您的构建变体使用setupWhatever()的正确实现。 -
这个解决方案对我有用,谢谢:)!