简化在Kotlin中添加和替换碎片

我正在做一个小应用程序,只有几个屏幕,我想要作为一个单一的活动调用几个片段。 我有一些Android的Java的经验,但使用Kotlin是一个新的领域。 我已经理解了如何基本上在Kotlin中添加片段,但我想以可重用的方式来完成。 我遇到了这里提到的解决方案,它的工作,但有一些我不明白。 我的下面MainActivity到目前为止,但我必须在onCreate方法中创建var welcomeFragment,就像我在这里:

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar) val toggle = ActionBarDrawerToggle( this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) drawer_layout.addDrawerListener(toggle) toggle.syncState() nav_view.setNavigationItemSelectedListener(this) var welcomeFragment = Fragment.instantiate(this@MainActivity, WelcomeFragment::class.java!!.getName()) addFragment( welcomeFragment, welcome) } inline fun android.support.v4.app.FragmentManager.inTransaction(func: android.support.v4.app.FragmentTransaction.() -> android.support.v4.app.FragmentTransaction) { beginTransaction().func().commit() } fun AppCompatActivity.addFragment(fragment: Fragment, frameId: Int){ supportFragmentManager.inTransaction { add(frameId, fragment) } } fun AppCompatActivity.replaceFragment(fragment: Fragment, frameId: Int) { supportFragmentManager.inTransaction{replace(frameId, fragment)} } } 

我似乎没有得到为什么我不能声明财产,并稍后分配它。 可以用lateinit声明它,但是当我尝试像这样分配它时:

 var welcomeFragment = Fragment.instantiate(this@MainActivity, WelcomeFragment::class.java!!.getName()) 

我得到“类型不匹配 – 要求:片段,找到:欢迎片段! 另外,如果我尝试这样做:

 addFragment(WelcomeFragment, welcome) 

Android Studio抱怨的是“WelcomeFragment”(现在只是空的,除了TextView中的“Welcome”)没有伴随对象。 我试图做一个,但我不明白它要做什么。 阅读文档没有帮助我与这一个。

所以我的问题是:我如何做实例化的权利,或者当我的大部分片段只有一个实例时,我必须做到这一点。 我可以通过向我的片段正确添加伴侣对象来避免这种情况吗? 那看起来怎么样?

对此有任何帮助,暗示我在这里有错误概念,或者一般的愚蠢指出将不胜感激!

请小心导入,有时我们有一个android.support.v4.app.Fragment ,然后我们不能使用它的android.app.Fragment.instantiate函数。