Android 这个集合添加片段代码块会变得更简单吗(Kotlin)
我是科特林的新手。我编写这个代码块是为了在backback中没有片段时添加一个片段。然而,我的代码块看起来有点笨拙。能用更好的方式写吗Android 这个集合添加片段代码块会变得更简单吗(Kotlin),android,kotlin,Android,Kotlin,我是科特林的新手。我编写这个代码块是为了在backback中没有片段时添加一个片段。然而,我的代码块看起来有点笨拙。能用更好的方式写吗 with(supportFragmentManager) { takeIf { backStackEntryCount == 0 } ?. apply { with(beginTransaction()) {
with(supportFragmentManager) {
takeIf { backStackEntryCount == 0 }
?. apply {
with(beginTransaction()) {
add(R.id.container, FirstFragment())
commit()
}
}
}
另外,with(beginTransaction())向我显示lint警告,事务应该提交()。我认为这与我对它的错误执行有关。请告诉我如何摆脱那个线头警告
编辑1
不是在这里,而是在某些地方,我会与add()一起执行一些其他操作。比如将片段添加到backstack中,并提供自定义转换
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对象上调用。这一个更适合我的情况。您知道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()
怎么样
if(savedInstanceState == null) { // replaces the `takeIf` things
supportFragmentManager.beginTransaction()
.add(R.id.container, FirstFragment())
.commit()
}
我会说它真的很美。你让我想起了我曾经用JAVA编写如此漂亮代码的日子。我会接受这个答案,但它让我想起了另一个常见的用例。我已经编辑了答案。你能尝试另一个简单的答案吗?我刚才意识到我们可以像add()和commit()一样直接链接addToBackStack()和addCustomTransitions()。看起来你的解决方案是最简单的。此外,它几乎没有使用那些花哨的Kotlin功能。美在于简单。谢谢。:)