Java android.view.InflateException:二进制 XML 文件第 9 行:错误膨胀类 <unknown>
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20228244/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
提问by vivatus
I've been looking into this issue for hours and similar errors that had solutions didn't do the trick.
我已经研究这个问题好几个小时了,但有解决方案的类似错误并没有解决问题。
I'm reusing this XML file for multiple ListViews in different activities (which I'm assuming has something to do with it) but I do not see why it would break. The XML file represents the individual items in the ListView.
我在不同的活动中为多个 ListView 重用这个 XML 文件(我假设这与它有关),但我不明白它为什么会中断。XML 文件表示 ListView 中的各个项目。
Here's the XML:
这是 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>
And here's the Java (error occurs on convertView = (FrameLayout) FrameLayout.inflate(mContext, R.layout.column_post, null);) :
这是 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;
}
Stacktrace
堆栈跟踪
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
Thanks in advance.
提前致谢。
采纳答案by vivatus
Thanks to @kiruwka, the problem is fixed!
感谢@kiruwka,问题已解决!
The issue was that I needed to make sure that I was using the same theme across activities.
问题是我需要确保我在活动中使用相同的主题。
回答by Larry Schiefer
I would use the inflator you grabbed from your context rather than the static method from FrameLayout, just to keep the code clear. FrameLayout's inherited inflate() method is just a wrapper around calling Context.getSystemService() then calling inflate. Try changing it to this:
我会使用您从上下文中获取的充气器,而不是来自 FrameLayout 的静态方法,只是为了保持代码清晰。FrameLayout 继承的 inflate() 方法只是调用 Context.getSystemService() 然后调用 inflate 的包装器。尝试将其更改为:
convertView =
(FrameLayout)inflater.inflate(mContext,
R.layout.column_post,
parent,
false);
I suspect the crash you are seeing is because you are passing null for the parent and the the default inflate() variant will attempt to attach the new child view you are creating to the parent (which you don't want to do.)
我怀疑您看到的崩溃是因为您为父级传递了 null,并且默认的 inflate() 变体将尝试将您正在创建的新子视图附加到父级(您不想这样做)。