首页 > 解决方案 > 在 Xml 中声明的 Fragment 中的 Fragment

问题描述

根据对现有问题的回答,在 android 中使用片段内部的片段曾经存在问题,但现在应该有一种方法让 Android 能够处理它们。

虽然现有问题涉及在 Java 中创建片段,但我想通过以下方式直接在 Xml 中创建它们:

<fragment
    android:layout_width="100dp"
    android:layout_height="100dp"

    class="com.ra.ra_e_akte.fragments.MyFragment"

    android:id="@+id/myFragment"
    />

不幸的是,我得到了错误:

2019-07-29 15:37:06.586 16529-16529/com.ra.ra_e_akte E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ra.ra_e_akte, PID: 16529
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ra.ra_e_akte/com.ra.ra_e_akte.activities.DefaultStacksActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #66: Binary XML file line #66: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2962)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1701)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6949)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #66: Binary XML file line #66: Error inflating class fragment
     Caused by: android.view.InflateException: Binary XML file line #66: Binary XML file line #66: Error inflating class fragment
     Caused by: android.view.InflateException: Binary XML file line #66: Error inflating class fragment
     Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.ra.ra_e_akte.fragments.SyncButton: calling Fragment constructor caused an exception
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:532)

onCreate 在父片段中:

override fun onCreateView(inflater: LayoutInflater,
                          container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    val view = inflater.inflate(R.layout.header_fragment, container, false)

    return view
}

是否有一种有效的方式来在其他片段的 xml 中声明片段?

标签: androidandroid-layoutandroid-fragments

解决方案


<fragment android:name="com.ra.ra_e_akte.fragments.MyFragment"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/myFragment"
    />

试试这个代码


推荐阅读