未找到片段 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()
}
我想为所有活动创建一个合同,因此我正在创建一个基础 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()
}