找不到片段PostFragment

时间:2018-08-13 21:57:06

标签: android android-layout android-fragments android-xml

我想为所有活动创建一个合同,因此我正在创建基础活动,但是由于某种原因,出现了有关R.id.container的错误。

我正在使用以下代码进行基本活动:

abstract class BaseActivity : AppCompatActivity() {


    @LayoutRes
    abstract fun layoutToInflate(): Int

    abstract fun doOnCreated()

    open fun initialFragment(): Fragment? = null

    abstract fun defineInitialFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        doOnCreated()
    }

}

这是我的MainActivity

class MainActivity : BaseActivity() {

    override fun layoutToInflate() = R.layout.activity_main

    override fun doOnCreated() {
        defineInitialFragment()
    }

    override fun initialFragment() = PostFragment.newInstance()

    override fun defineInitialFragment() {
        val initialFragment = initialFragment() ?: return
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.container, initialFragment)
                .commitNow()
    }

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">


    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.main.MainActivity" />
</layout>

1 个答案:

答案 0 :(得分:1)

在您发布的代码中,这是您的基础onCreate()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    doOnCreated()
}

这是您的子类:

override fun doOnCreated() {
    defineInitialFragment()
}

您实际上都不在这两个位置中设置活动的内容视图。您必须在基本活动的setContentView(layoutToInflate())中某个地方致电onCreate()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(layoutToInflate())
    doOnCreated()
}