Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.view.InflateException:二进制XML文件行#8:膨胀类时出错<;未知>;_Android_Android Custom View - Fatal编程技术网

android.view.InflateException:二进制XML文件行#8:膨胀类时出错<;未知>;

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

首先,我知道有很多问题和我的一样。我已经读了所有的书,还没有找到我的情况的答案

我的处境

我正在尝试像Gmail一样实现
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);
    }