Android视图膨胀异常:二进制XML文件第9行:充气类<unknown>出错。

8
我是一名帮助翻译文字的助手。下面是需要翻译的it技术相关内容:

我已经花了几个小时来解决这个问题,类似的错误并没有解决问题。

我在不同的活动中多次使用这个XML文件为多个ListView重用(我认为这可能与此有关),但我不知道为什么它会出错。该XML文件代表了ListView中的单个项目。

这是XML代码:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp" >

    <LinearLayout
        android:id="@+id/post"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="?attr/postBackground"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/postTop"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="8dp" >

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical" >

                    <!-- Title -->

                    <TextView
                        android:id="@+id/title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="sans-serif-light"
                        android:textColor="?attr/postTitle"
                        android:textSize="16sp"
                        android:textStyle="bold" />

                    <!-- subreddit + domain -->

                    <TextView
                        android:id="@+id/subredditDomainVotes"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="sans-serif"
                        android:gravity="left"
                        android:textColor="#828282"
                        android:textSize="13sp" />

                    <TextView
                        android:id="@+id/date"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="sans-serif"
                        android:gravity="left"
                        android:textColor="#828282"
                        android:textSize="13sp" />
                </LinearLayout>

            </LinearLayout>

            <ImageView
                android:id="@+id/imagePreview"
                android:layout_width="fill_parent"
                android:layout_height="200dp"
                android:adjustViewBounds="false"
                android:background="?attr/postPreviewBground"
                android:contentDescription="@string/empty"
                android:scaleType="centerCrop" />

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="?attr/postBottom"
                android:padding="8dp" >

                <!-- Author -->

                <TextView
                    android:id="@+id/author"
                    style="?attr/postButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:textSize="12sp" />

                <!-- Comments -->

                <TextView
                    android:id="@+id/comments"
                    style="?attr/postButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:textSize="12sp" />
            </RelativeLayout>
        </LinearLayout>
    </LinearLayout>

</FrameLayout>

以下是相关的Java代码(出错代码为convertView = (FrameLayout) FrameLayout.inflate(mContext, R.layout.column_post, null);):

@Override
public View getView(int position, View convertView, ViewGroup parent) {

JSONObject thePost = null;
String kind = null;
try {
    thePost = mPosts.getJSONObject(position);
    kind = thePost.getString("kind");
} catch (Exception e) {
    System.out.println("errreoroer");
}

if (null == convertView) {

    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = new FrameLayout(mContext);

    if (Switches.getInMailView()) {

        convertView = (RelativeLayout) inflater.inflate(
                R.layout.mail_post, parent, false);

        mailHolder = new MailHolder();
        mailHolder.authorView = (TextView) convertView
                .findViewById(R.id.author);
        mailHolder.dateView = (TextView) convertView
                .findViewById(R.id.date);
        mailHolder.subjectView = (TextView) convertView
                .findViewById(R.id.subject);

    } else {

        if (kind.equals("t3")) {
                  //ERROR HAPPENS RIGHT HERE
            convertView = (FrameLayout) FrameLayout.inflate(mContext, R.layout.column_post, null);

            holder = new PostHolder();
            // grab the post view objects
            holder.postTitleView = (TextView) convertView
                    .findViewById(R.id.title);
            holder.dateView = (TextView) convertView
                    .findViewById(R.id.date);
            holder.authorView = (TextView) convertView
                    .findViewById(R.id.author);
            holder.commentsView = (TextView) convertView
                    .findViewById(R.id.comments);
            holder.subredditDomainVotesView = (TextView) convertView
                    .findViewById(R.id.subredditDomainVotes);
            holder.imagePreviewView = (ImageView) convertView
                    .findViewById(R.id.imagePreview);
            holder.postTopView = (LinearLayout) convertView
                    .findViewById(R.id.postTop);

            convertView.setTag(holder);

        }

    }

} else {

    if (Switches.getInMailView())
        mailHolder = (MailHolder) convertView.getTag();
    else {

        if (kind.equals("t3"))
            holder = (PostHolder) convertView.getTag();

    }

}

try {

    if (Switches.getInMailView())
        return buildMailPostItem((RelativeLayout) convertView,
                thePost.getJSONObject("data"), kind);
    else {
        if (kind.equals("t3"))
            return buildGenericPostItem((FrameLayout) convertView,
                    thePost.getJSONObject("data"), kind, position);
    }

} catch (JSONException e) {

    return null;
}

return convertView;

}

堆栈跟踪

11-26 18:23:09.492: E/AndroidRuntime(4616): FATAL EXCEPTION: main
11-26 18:23:09.492: E/AndroidRuntime(4616): Process: com.reditr.app, PID: 4616
11-26 18:23:09.492: E/AndroidRuntime(4616): android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at com.reditr.adapters.PostAdapter.getView(PostAdapter.java:145)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.AbsListView.obtainView(AbsListView.java:2263)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.ListView.makeAndAddView(ListView.java:1790)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.ListView.fillDown(ListView.java:691)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.ListView.fillFromTop(ListView.java:752)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.ListView.layoutChildren(ListView.java:1630)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.AbsListView.onLayout(AbsListView.java:2091)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1585)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.View.layout(View.java:14785)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewGroup.layout(ViewGroup.java:4631)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1985)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1742)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.Choreographer.doFrame(Choreographer.java:532)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.os.Handler.handleCallback(Handler.java:733)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.os.Looper.loop(Looper.java:137)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at android.app.ActivityThread.main(ActivityThread.java:4998)
11-26 18:23:09.492: E/AndroidRuntime(4616):     at java.lang.refl

提前感谢。


1
你能贴出你的堆栈跟踪吗? - kiruwka
4
首先,尝试移除android:background="?attr/postBackground"这一行,看看是否会产生不同的日志(可能会在另一行崩溃,也可能正常工作)。 - kiruwka
6
你确定你的两个活动使用相同的主题吗? - kiruwka
2
哈哈,问题解决了。向您致以10000分的赞扬。 - vivatus
7
好的,谢谢。如果您愿意,我可以把我的评论作为答案供您接受,这样您就可以将您的10000积分转换为15分。否则,只需提供解决方案并接受一个答案,这样对其他人也会有帮助。 - kiruwka
显示剩余4条评论
4个回答

14
问题是我需要确保在各个活动中使用相同的主题。

0

我在很多项目中都遇到过这个问题,总是忘记同样的事情。

Android Studio --> Left menu--> Projects (Not Android)-->src --> res

drawable和drawable-v24,我的一些xml文件位于drawable-v24下。将它们拖到drawable中,问题解决了。


仍然不清楚一句话在哪里结束,下一句话从哪里开始。例如,在“我的XML文件”附近。 - undefined

0

我会使用您从上下文中获取的充气器,而不是来自FrameLayout的静态方法,只是为了使代码清晰。FrameLayout继承的inflate()方法只是一个包装器,用于调用Context.getSystemService(),然后调用inflate()方法。尝试将其更改为以下内容:

        convertView =
            (FrameLayout)inflater.inflate(mContext,
                                          R.layout.column_post,
                                          parent,
                                          false);

我怀疑你看到的崩溃是因为你正在传递 null 作为父级,而默认的 inflate() 变体将尝试将你创建的新子视图附加到父级上(你不想这样做)。

你的XML文件叫什么名字?我知道你说过你要将它用于多个地方,那么它是相同的内容只是改了名字吗?这个XML文件在你的树中的res/layout/column_post.xml吗? - Larry Schiefer
是的,xml文件就在res/layout/column_post.xml中。只有当我在单独的活动中使用它时才会崩溃。如果我在同一个活动中重复使用相同的XML文件,它就可以正常工作。 - vivatus
刚刚修复了问题,@kiruwka 说要确保活动具有相同的主题。结果发现它们不一样,然后就奇迹般地解决了! - vivatus

-1
如果有人遇到了这个异常(android.view.InflateException),请搜索异常的原因是否是因为找不到drawable资源,就像下面的错误信息一样,例如:
Caused by: android.content.res.Resources$NotFoundException: Resource "com.example.example:drawable/white_curvy_back"

所以很可能是因为您在运行应用程序的设备上使用的是早于Android 7.0(Nougat)的Android版本,并且您将资源声明在“Drawable-v24”文件夹中,这是在Android 7.0(API级别24)中引入的特定版本文件夹。它用于存储专为运行Android 7.0或更高版本的设备设计的可绘制资源。放置在此文件夹中的资源仅在运行Android 7.0或更高版本的设备上使用,而运行早期版本的设备将忽略这些资源,并在尝试填充指向任何这些资源的任何xml文件时抛出“Resources$NotFoundException”。
为了解决这个问题,如果您的应用程序没有任何特定版本的可绘制资源,或者如果您希望这些资源对所有Android版本都可用,将所有资源安全地移动到“drawable”文件夹而不是“drawable-v24”文件夹是安全的。这样做将使资源可在所有Android版本中访问,包括早于Android 7的版本。

你在修改这篇文章时使用了任何生成式人工智能吗? - undefined
@starball 是的,我用它通常是为了纠正我的语法错误和帮助查找定义。我很好奇你是怎么知道的?XD - undefined
1
https://meta.stackoverflow.com/q/424036/11107541 - undefined
2
@kouranyi 虽然我们不详细讨论(请参考此处:https://meta.stackoverflow.com/q/425578/11810933),但可以说Starball在Stack Overflow上已经见过成千上万个AI辅助的答案,并且在识别它们方面非常擅长。虽然我希望有一天我们能够达到ChatGPT这样的工具可以辅助语法的程度,但目前我们发现它们经常改变用户真正想要表达的意思。因此,政策也禁止这种使用。目前,只需依靠您自己的语言和专业知识,这样就足够了 - 谢谢! - undefined
我认为这是一个很好的例子,展示了ChatGPT(或类似的)尝试(可能)做得过多的情况,使用了不必要的同义词(甚至更糟糕的是,有害的),并且部分重写了句子。 - undefined
你本来可以通过使用一个老式的拼写检查器(内置于所有主要的网络浏览器中,无需安装)来完成大部分工作。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接