未找到片段 PostFragment 的 ID 0x7f080035 (com.androidjetpackph:id/container) 的视图

No view found for id 0x7f080035 (com.androidjetpackph:id/container) for fragment PostFragment

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

我正在使用以下代码做一个 Base Activity:

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()
    }

}

这是我的主Activity

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>

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

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

这是你的子类:

override fun doOnCreated() {
    defineInitialFragment()
}

在这两个地方您实际上都没有设置 activity 的内容视图。您必须在某个地方调用 setContentView(layoutToInflate()),可能是在您的基地 activity 的 onCreate():

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