我想到一个应用程序结构:
DashBoard Activity
考虑到这一点,我试图在
HomeFragment
中加载不同的片段,这也是一个片段我已经在HomeFragment的
onCreateView()
中编写了以下代码val fm : FragmentManager = childFragmentManager
val container = R.id.greetingFragmentContainer
val greetingFragment : Fragment? = fm.findFragmentById(R.id.fragmentGreeting)
if (greetingFragment != null) {
fm.beginTransaction().replace(container, greetingFragment).commit()
} else {
Log.e("HomeFragment", "Fragment not found")
}
fragment_greeting.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/fragmentGreeting"
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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="._fragments.dash.GreetingFragment">
<ImageView
android:id="@+id/profile_image"
android:layout_width="96dp"
android:layout_height="96dp"
android:src="@drawable/loading"/>
</FrameLayout>
使用该if语句,我发现
greetingFragment
值返回null。我究竟做错了什么?
最佳答案
在HomeFragment
中尝试一下
lateinit var context: AppCompatActivity
override fun onAttach(context: Context) {
super.onAttach(context)
this.context = context as AppCompatActivity
}
然后调用不含
findFragmentbyId
的片段,如下所示: val fm = context.supportFragmentManager
val fragmentTransaction: FragmentTransaction
val fragment = GreetingFragment()
fragmentTransaction = fm.beginTransaction()
fragmentTransaction.replace(R.id.container, fragment)
.addToBackStack(null)
fragmentTransaction.commit()
关于android - 将 fragment 加载到Kotlin的 fragment 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59102170/