我是Kotlin的新手。我编写了这个代码块,以便在backstack中没有片段时添加片段。然而,我的代码块看起来很笨拙。可以用更好的方式写出来吗?
with(supportFragmentManager) {
takeIf { backStackEntryCount == 0 }
?. apply {
with(beginTransaction()) {
add(R.id.container, FirstFragment())
commit()
}
}
}
另外,with(beginTransaction())显示lint警告该事务应该被提交()。我认为这与我错误的实现有关。请告诉我如何摆脱那个棉绒警告。
编辑1
不是这里,但在某些地方,我确实执行了一些其他操作以及add()。就像将片段添加到backstack并提供自定义Transitions一样。
activity?.supportFragmentManager?.let {
with(it.beginTransaction()) {
setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right)
addToBackStack("second")
replace(R.id.container, SecondFragment())
commit()
}
}
现在需要在FragmentTransaction对象上调用一些方法。这个更适合我的情况。
答案 0 :(得分:1)
怎么样
if(savedInstanceState == null) { // replaces the `takeIf` things
supportFragmentManager.beginTransaction()
.add(R.id.container, FirstFragment())
.commit()
}
答案 1 :(得分:0)
你知道kotlin提供扩展功能,以便轻松添加类似下面的代码...
fun Fragment.addReportFragment(): Fragment {
mFragment = ReportFragment()
this.fragmentManager?.beginTransaction()?.replace(if (this is ReportFragment) LOGIN_ROOT else MAIN_ROOT, mFragment, REPORT_FRAGMENT)?.commit()
return mFragment as ReportFragment
}
使用以下代码的简单方法..
var pickpowerfrag = PickPowerFragment()
fragmentManager.beginTransaction()
.replace(R.id.ReplaceFrame, pickpowerfrag)
.addToBackStack(null)
.commit()