【问题标题】:android.view.InflateException on setContentView layout containing fragment包含片段的 setContentView 布局上的 android.view.InflateException
【发布时间】:2020-04-20 18:49:56
【问题描述】:

在制作我的应用程序时,我意识到我使用了片段类而不是活动,但我没有重新启动,而是创建了一个新的 XML 布局文件并将其放入片段组件中。现在,当我在该布局上调用 setContentView 时,我的应用程序崩溃了,有没有办法我仍然可以使用这个片段类,还是需要使用 Activity 类重新启动?

这是 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.redacted.redacted.ui.pSelect.pSelect"
        tools:layout="@layout/p_select"
    />

 </LinearLayout>

感谢任何帮助。

p_select:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res      /android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBackground">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Selection Page"
    android:layout_margin="10dp"
    android:textColor="#FFFFFF"
    android:textSize="22dp"
    android:textStyle="bold"
    android:id="@+id/title"/>

<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/title"
    android:id="@+id/select_RV"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@+id/select_RV">

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="id 1"
    android:onClick="button1"/>

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="id 2"
    android:onClick="button2"/>

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="id 3"
    android:onClick="button3"/>

</LinearLayout>


</RelativeLayout>

这是错误信息:

E/AndroidRuntime: 致命异常: main 进程:com.redacted.pnews,PID:10863 java.lang.IllegalStateException:无法执行 android:onClick 的方法 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 引起:android.view.InflateException:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:膨胀类片段时出错 引起:android.view.InflateException:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:膨胀类片段时出错 原因:java.lang.IllegalArgumentException:二进制 XML 文件第 8 行:必须指定唯一的 android:id、android:tag 或具有 com.redacted.pnews.ui.pSelect.pSelect 的 id 的父级 在 androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3717) 在 androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:120) 在 androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:405) 在 androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:387) 在 android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:682) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:534) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:481) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.redacted.pnews.MainActivity.backBTN(MainActivity.java:91) 在 java.lang.reflect.Method.invoke(本机方法) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

出于个人原因,我宁愿不发布课程代码

在MainActivity类的onclick监听器中调用onCreateView,fragment类的主要用途是在p_select中填写recyclerview,所以我没有fragment类代码影响这个错误。

【问题讨论】:

  • 你能发布@layout/p_select这个布局代码吗?
  • 什么错误应该是准确的,你为此做了什么?
  • 发布课程代码和 logcat 错误屏幕
  • 请发布您的活动代码和片段路径。是的,它应该工作
  • 我添加了新信息

标签: android android-fragments


【解决方案1】:

原来这是我做的课程中的一个错误,感谢您的帮助,但似乎答案与问题无关。

【讨论】:

    【解决方案2】:

    错误信息说

    错误膨胀类片段原因:java.lang.IllegalArgumentException:二进制 XML 文件第 8 行:必须为 com 指定唯一的 android:id、android:tag 或具有 id 的父级 .redacted.pnews.ui.pSelect.pSelect

    所以将android:id 添加到您的&lt;fragment&gt;

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    
      <fragment
        android:id="@+id/select_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.redacted.redacted.ui.pSelect.pSelect"
        tools:layout="@layout/p_select"
      />
    
    </LinearLayout>
    

    【讨论】:

    • 这不起作用,但那个特定的错误行现在消失了
    • 我的意思是,确实意味着它解决了您的问题。如果没有这个改变,它就不会工作,因为需要一个 id 或标签。修复此问题后,您刚刚发现了其他不相关的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多