android - 将 fragment 加载到Kotlin的 fragment 中

标签 android android-fragments kotlin fragment

我想到一个应用程序结构:

DashBoard Activity

  • HomeFragment
  • AdsFragment
  • GreetingFragment
  • ExperienceFragment

  • 考虑到这一点,我试图在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/

    相关文章:

    android - ` DialogInterface.dismiss()` 和 `DialogInterface.cancel()` 有什么区别?

    android - ObservableScrollView 中的自定义 ViewPager 无法正确测量高度

    android - 如何刷新充满BaseAdapter的Fragment中的ListView?

    android - fragment 中的 SimpleCursorAdapter ClassCastException

    kotlin - 检查class是否为KParameter的有效值

    android-studio - 分类器没有伴随对象

    java - 如何在 gridView 上添加 OnTouchListener?

    java - Android - 如何将动画 GIF 文件上传到 Parse Server

    android - 如何在 Android 中以编程方式设置样式属性?

    firebase - 有没有办法将 Firebase(身份验证)与 Kotlin 多平台结合使用?