Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 这个集合添加片段代码块会变得更简单吗(Kotlin)_Android_Kotlin - Fatal编程技术网

Android 这个集合添加片段代码块会变得更简单吗(Kotlin)

Android 这个集合添加片段代码块会变得更简单吗(Kotlin),android,kotlin,Android,Kotlin,我是科特林的新手。我编写这个代码块是为了在backback中没有片段时添加一个片段。然而,我的代码块看起来有点笨拙。能用更好的方式写吗 with(supportFragmentManager) { takeIf { backStackEntryCount == 0 } ?. apply { with(beginTransaction()) {

我是科特林的新手。我编写这个代码块是为了在backback中没有片段时添加一个片段。然而,我的代码块看起来有点笨拙。能用更好的方式写吗

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功能。美在于简单。谢谢。:)