首页 > Binary XML file line #32: Error inflating class TextView???

Binary XML file line #32: Error inflating class TextView???

先贴出错误

android.view.InflateException: Binary XML file line #32: Error inflating class TextView
                                                                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
                                                                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
                                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
                                                                     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                                                                     at com.jack.jianyu.ui.adapter.ChatMessageAdapter.getView(ChatMessageAdapter.java:67)

然后这个是ChatMessageAdapter

public class ChatMessageAdapter extends BaseAdapter {

    private Context mContext = null;
    private List<ChatMessageBean> messageBeans = null;
    private LayoutInflater mInflater = null;

    public ChatMessageAdapter(Context context, List<ChatMessageBean> mDataList) {
        this.mContext = context;
        this.messageBeans = mDataList;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        ChatMessageBean chatMessageBean = messageBeans.get(position);
        if (chatMessageBean.getType() == ChatMessageBean.Type.RECEIVEMSG) {
            return 0;
        }
        return 1;
    }

    @Override
    public int getCount() {
        return messageBeans.size();
    }

    @Override
    public Object getItem(int position) {
        return messageBeans.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ChatMessageBean chatMessageBean = messageBeans.get(position);
        ViewHolder viewHolder = null;
        if (convertView == null) {
            if (getItemViewType(position) == 0) {
                convertView = mInflater.inflate(R.layout.item_chat_receivemsg, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.mDate = (TextView) convertView
                        .findViewById(R.id.tv_from_time);
                viewHolder.mMsg = (TextView) convertView
                        .findViewById(R.id.tv_from_content);
            } else {
                convertView = mInflater.inflate(R.layout.item_chat_sendmsg, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.mDate = (TextView) convertView
                        .findViewById(R.id.tv_to_time);
                viewHolder.mMsg = (TextView) convertView
                        .findViewById(R.id.tv_to_content);
            }
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        // 设置数据
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        viewHolder.mDate.setText(df.format(chatMessageBean.getDate()));
        viewHolder.mMsg.setText(chatMessageBean.getMsg());
        return convertView;
    }

    public final class ViewHolder {
        TextView mDate;
        TextView mMsg;
        XCRoundImageView mImage;
    }
}

简单的说就是个双布局,一个聊天界面
R.layout.item_chat_receivemsg

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

    <TextView
        android:id="@+id/tv_from_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="3dp"
        android:text="12:12:12"
        android:textColor="@color/textInfo"
        android:textSize="10sp" />


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:orientation="horizontal">

        <com.jack.jianyu.widget.XCRoundImageView
            android:id="@+id/image_from_tuling"
            style="@style/user_face_image"
            android:contentDescription="@null" />

        <TextView
            android:id="@+id/tv_from_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:background="@drawable/chat_recevie_bg_selector"
            android:clickable="true"
            android:gravity="center_vertical"
            android:textSize="15sp" />

    </LinearLayout>
</LinearLayout>

R.layout.item_chat_sendmsg

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:gravity="right"
    android:orientation="vertical"
    android:padding="8dp">

    <TextView
        android:id="@+id/tv_to_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="3dp"
        android:text="12:12:12"
        android:textColor="@color/textInfo"
        android:textSize="10sp" />


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:orientation="horizontal">


        <TextView
            android:id="@+id/tv_to_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="8dp"
            android:background="@drawable/chat_send_bg_selector"
            android:clickable="true"
            android:gravity="center_vertical"
            android:textSize="15sp" />

        <com.jack.jianyu.widget.XCRoundImageView
            android:id="@+id/image_to_tuling"
            style="@style/user_face_image"
            android:contentDescription="@null" />
    </LinearLayout>
</LinearLayout>

这是在解析XML出现了问题,建议Rebuild一下刷新XML布局文件,另外检查一下布局文件中的XCRoundImageView内是否存在问题。


你的代码我认真看了一下,发现很可能是这个原因导致的错误。
我先来说说你代码的意图,看看对不对:
你是想在聊天界面显示自己接受到的信息和自己发送的信息,但是这些信息的排列是没有规律的。
你的思路使用两个ViewHolder来分别保存接受到的信息和自己发送的信息对应布局文件中的内容,这个想法是没错的。来看看你的这段代码

 if (convertView == null) {
            if (getItemViewType(position) == 0) {
                convertView = mInflater.inflate(R.layout.item_chat_receivemsg, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.mDate = (TextView) convertView
                        .findViewById(R.id.tv_from_time);
                viewHolder.mMsg = (TextView) convertView
                        .findViewById(R.id.tv_from_content);
            } else {
                convertView = mInflater.inflate(R.layout.item_chat_sendmsg, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.mDate = (TextView) convertView
                        .findViewById(R.id.tv_to_time);
                viewHolder.mMsg = (TextView) convertView
                        .findViewById(R.id.tv_to_content);
            }
            convertView.setTag(viewHolder);
        }

很明显,你的代码只会保存一个ViewHolder,而且一般情况下保存的是接受信息的ViewHolder,因为if (convertView == null)里面的代码语句在一开始时只会执行一次。

给你一个解决方案的思路:

【热门文章】
【热门文章】