android.view.InflateException:二进制XML文件行#8:膨胀类时出错<;未知>;
首先,我知道有很多问题和我的一样。我已经读了所有的书,还没有找到我的情况的答案 我的处境 我正在尝试像Gmail一样实现android.view.InflateException:二进制XML文件行#8:膨胀类时出错<;未知>;,android,android-custom-view,Android,Android Custom View,首先,我知道有很多问题和我的一样。我已经读了所有的书,还没有找到我的情况的答案 我的处境 我正在尝试像Gmail一样实现LetterAvatarView。我使用了,并通过添加LetterAvatarView修改了它的item\u message.xml。下面是结果 下面是item\u message.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout
LetterAvatarView
。我使用了,并通过添加LetterAvatarView
修改了它的item\u message.xml
。下面是结果
下面是item\u message.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingTop="@dimen/spacing">
<com.github.nkzawa.socketio.androidchat.LetterAvatarView <--- error occur
android:id="@+id/la_avatar"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:id="@+id/username"
style="?android:textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="?android:textColorPrimary"
android:textStyle="bold" />
<TextView
android:id="@+id/message"
style="?android:textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/spacing"
android:paddingRight="@dimen/spacing"
android:singleLine="true"
android:textColor="?android:textColorPrimary" />
</LinearLayout>
更新1
这是我的适配器类
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
private List<Message> mMessages;
private int[] mUsernameColors;
public MessageAdapter(Context context, List<Message> messages) {
mMessages = messages;
mUsernameColors = context.getResources().getIntArray(R.array.username_colors);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layout = -1;
switch (viewType) {
case Message.TYPE_MESSAGE:
layout = R.layout.item_message;
break;
case Message.TYPE_LOG:
layout = R.layout.item_log;
break;
case Message.TYPE_ACTION:
layout = R.layout.item_action;
break;
}
View v = LayoutInflater
.from(parent.getContext())
.inflate(layout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
Message message = mMessages.get(position);
viewHolder.setMessage(message.getMessage());
viewHolder.setUsername(message.getUsername());
}
@Override
public int getItemCount() {
return mMessages.size();
}
@Override
public int getItemViewType(int position) {
return mMessages.get(position).getType();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mUsernameView;
private TextView mMessageView;
private LetterAvatarView mAvatarView;
public ViewHolder(View itemView) {
super(itemView);
mUsernameView = (TextView) itemView.findViewById(R.id.username);
mMessageView = (TextView) itemView.findViewById(R.id.message);
mAvatarView = (LetterAvatarView) itemView.findViewById(R.id.la_avatar);
}
public void setUsername(String username) {
if (null == mUsernameView) return;
mUsernameView.setText(username);
mUsernameView.setTextColor(getUsernameColor(username));
if(mAvatarView != null) mAvatarView.setText(username);
}
public void setMessage(String message) {
if (null == mMessageView) return;
mMessageView.setText(message);
}
private int getUsernameColor(String username) {
int hash = 7;
for (int i = 0, len = username.length(); i < len; i++) {
hash = username.codePointAt(i) + (hash << 5) - hash;
}
int index = Math.abs(hash % mUsernameColors.length);
return mUsernameColors[index];
}
}
}
问题
我的代码有时会工作。但有时它崩溃了:
android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:39)
at com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:13)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:508)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
android.view.InflateException:二进制XML文件行#8:膨胀类时出错
位于android.view.LayoutInflater.createView(LayoutInflater.java:620)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
位于com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:39)
位于com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:13)
位于android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
位于android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
位于android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
位于android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
位于android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:508)
位于android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
位于android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:448)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:448)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:448)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:448)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:448)
位于android.view.view.layout(view.java:14289)
位于android.view.ViewGroup.layout(ViewGroup.java:4562)
在android.view.ViewRootImpl.performLayout上(ViewRootImpl.java:1976)
在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:1730)
位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
在android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
在android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
位于android.view.Choreographer.doCallbacks(Choreographer.java:562)
位于android.view.Choreographer.doFrame(Choreographer.java:532)
在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)中
位于android.os.Handler.handleCallback(Handler.java:730)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5103)
位于java.lang.reflect.Method.Invokenactive(本机方法)
如何修复它?尝试用硬编码颜色替换“android:textColor=“?android:textColorPrimary;”i、 e:“#212121”,在所有单个列表项中,让我们看看结果。同时尝试删除“style=“?android:textAppearanceMedium”“…让我们看看它是否解决了问题。我也曾经遇到过类似的问题。尝试用硬编码颜色替换“android:textColor=“?android:textColorPrimary”“”,即:“#212121”,在所有单个列表项中,让我们看看结果。同时尝试删除“style=“?android:textAppearanceMedium”…看看它是否解决了这个问题。我也曾经遇到过这样的问题。好的,我们可能会有不同的错误 第一个想法是
@Override
public int getItemViewType(int position) {
return mMessages.get(position).getType();
}
将返回0。现在请不要完全删除您的消息
对象。但是当Message.TYPE\u Message
、Message.TYPE\u LOG
或Message.TYPE\u ACTION
不是0时,您将在onCreateViewHolder()中充气一个未知布局
关于如何创建列表
对象的一些代码将非常有用
另一个问题是(可能)您有不同的布局和不同的视图。
您的R.layout.item\u日志和R.layout.item\u操作如何?当它们不包含R.id.username
,R.id.message
和R.id.lau avater
时,它将崩溃
android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:39)
at com.github.nkzawa.socketio.androidchat.MessageAdapter.onCreateViewHolder(MessageAdapter.java:13)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:508)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14289)
at android.view.ViewGroup.layout(ViewGroup.java:4562)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
@Override
public int getItemViewType(int position) {
return mMessages.get(position).getType();
}
View v = LayoutInflater
.from(parent.getContext())
.inflate(layout, parent, false); <-- line 39
private void init(){
mTextPaint = new Paint();
mBackgroundPaint = new Paint();
Random random = new Random();
int backgroundColor = Color.parseColor(colors[random.nextInt(colors.length)]);
mBackgroundPaint.setColor(backgroundColor);
mBackgroundPaint.setStyle(Paint.Style.FILL);
mBackgroundPaint.setAntiAlias(true);
mTextPaint.setColor(Color.WHITE);
mTextPaint.setAntiAlias(true);
mTextPaint.setTextAlign(Paint.Align.CENTER);
}