我想为所有活动创建一个合同,因此我正在创建基础活动,但是由于某种原因,出现了有关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>
答案 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()
}