这个集合可以添加片段代码块变得更简单(Kotlin)

时间:2018-03-29 14:27:26

标签: android kotlin

我是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对象上调用一些方法。这个更适合我的情况。

2 个答案:

答案 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()