我想重构这部分代码,因为你可以看到有很多函数重复
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.home -> {
homeFragment = HomeFragment()
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, homeFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
R.id.loanable -> {
loanableFragment = LoanableFragment()
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, loanableFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
R.id.payable -> {
payableFragment = PayableFragment()
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, payableFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
R.id.compare_rate -> {
compareRateFragment = CompareRateFragment()
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, compareRateFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
}
drawerLayout.closeDrawer(GravityCompat.START)
return true
}
最佳答案
您可以使用kotlin扩展功能让您的代码更加清晰。
fun Fragment.replace() {
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, this)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.home -> HomeFragment().replace()
R.id.loanable -> LoanableFragment().replace()
R.id.payable -> PayableFragment().replace()
R.id.compare_rate -> CompareRateFragment().replace()
}
drawerLayout.closeDrawer(GravityCompat.START)
return true
}
如果您的 fragment 容器 ID 不同:
infix fun Fragment.replaceTo(id: Int) {
supportFragmentManager
.beginTransaction()
.replace(id, this)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.home -> HomeFragment() replaceTo R.id.frame_layout1
R.id.loanable -> LoanableFragment() replaceTo R.id.frame_layout2
R.id.payable -> PayableFragment() replaceTo R.id.frame_layout3
R.id.compare_rate -> CompareRateFragment() replaceTo R.id.frame_layout4
}
drawerLayout.closeDrawer(GravityCompat.START)
return true
}
关于android - 我如何重构抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56680807/