listview的Adapter使用布局实现消息模块左右两边消息的显示布局遇到的问题

来源:互联网 发布:淘宝买衣服不撞衫 编辑:程序博客网 时间:2024/05/17 04:27

1、listview的Adapter使用两套布局实现消息模块左右两边消息的显示布局遇到的问题,项目开始的时候想使用两套布局文件分别管理左右消息的展示,但是在使用过程中遇到一些问题。在Adapter中使用ViewHolder的时候复用控件就没法再次判断使用哪种布局了,错误代码示例:

  /**     * 这样是错误的写法(等待大牛解决这个使用两个布局的正确办法)  *     * @param position     * @param convertView     * @param parent     * @return     */    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = null;        boolean msgtype = messageBeans.get(position).issendmsg();        if (convertView == null) {        if (!msgtype) {            convertView = LayoutInflater.from(mContext).inflate(R.layout.chatting_item_msg_text_left, null);        } else {            convertView = LayoutInflater.from(mContext).inflate(R.layout.chatting_item_msg_text_right, null);        }        viewHolder = new ViewHolder();        viewHolder.username = (TextView) convertView.findViewById(R.id.username_TV);        viewHolder.msg = (TextView) convertView.findViewById(R.id.msg_TV);        convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        viewHolder.username.setText(messageBeans.get(position).getUsername());        viewHolder.msg.setText(messageBeans.get(position).getMsg());        return convertView;    }    private class ViewHolder {        private TextView username;        private TextView msg;    }

2、没办法只能使用大众常用的方法了(想使用其他办法结果没走通。。。) 常用做法是:使用一个布局,咋里边布局左右消息的展示,在Adapter中通过消息来源类别判断是显示还是隐藏左边或右边的布局,

     if (!msgtype) {            viewHolder.left_ll.setVisibility(View.VISIBLE);            viewHolder.right_ll.setVisibility(View.GONE);            viewHolder.msg_left.setText(messageBeans.get(position).getMsg());        } else {            viewHolder.left_ll.setVisibility(View.GONE);            viewHolder.right_ll.setVisibility(View.VISIBLE);            viewHolder.msg_right.setText(messageBeans.get(position).getMsg());        }

下边是主要代码片段:

  /**     * 遗留问题   使用viewholder时候就不行  不使用可以  但是这样效率不高  等待高手解惑。。。     * 解决办法 :暂时使用一个布局使用gone和visable判断显示     *     * @param position     * @param convertView     * @param parent     * @return     */    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder = null;        boolean msgtype = messageBeans.get(position).issendmsg();        if (convertView == null) {            viewHolder = new ViewHolder();            convertView = LayoutInflater.from(mContext).inflate(R.layout.chatting_item_msg_text, null);            viewHolder.msg_left = (TextView) convertView.findViewById(R.id.msg_left_TV);            viewHolder.msg_right = (TextView) convertView.findViewById(R.id.msg_right_TV);            viewHolder.left_ll = (RelativeLayout) convertView.findViewById(R.id.left_msg_ll);            viewHolder.right_ll = (RelativeLayout) convertView.findViewById(R.id.right_msg_ll);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        if (!msgtype) {            viewHolder.left_ll.setVisibility(View.VISIBLE);            viewHolder.right_ll.setVisibility(View.GONE);            viewHolder.msg_left.setText(messageBeans.get(position).getMsg());        } else {            viewHolder.left_ll.setVisibility(View.GONE);            viewHolder.right_ll.setVisibility(View.VISIBLE);            viewHolder.msg_right.setText(messageBeans.get(position).getMsg());        }        return convertView;    }    private class ViewHolder {        private RelativeLayout left_ll;        private RelativeLayout right_ll;        private TextView msg_left;        private TextView msg_right;    }

下边是消息的xml布局文件

这里写图片描述

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <RelativeLayout        android:id="@+id/left_msg_ll"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentStart="true"        android:layout_centerVertical="true"        android:orientation="horizontal">        <ImageView            android:id="@+id/imageView1"            android:layout_width="40dp"            android:layout_height="40dp"            android:layout_alignParentStart="true"            android:layout_centerVertical="true"            android:layout_gravity="center"            android:src="@mipmap/third_guide_head_1" />        <LinearLayout            android:id="@+id/linearLayout1"            style="@style/chating_msg_receive_style"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_gravity="center"            android:layout_toEndOf="@+id/imageView1"            android:orientation="vertical">            <TextView                android:id="@+id/msg_left_TV"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_gravity="center"                android:gravity="center"                android:text="左边消息" />        </LinearLayout>    </RelativeLayout>    <RelativeLayout        android:id="@+id/right_msg_ll"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/left_msg_ll"        android:layout_alignParentEnd="true">        <LinearLayout            android:id="@+id/linearLayout"            style="@style/chating_msg_send_style"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_toStartOf="@+id/imageView2"            android:gravity="center"            android:orientation="horizontal">            <TextView                android:id="@+id/msg_right_TV"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_gravity="center"                android:gravity="center"                android:text="右边消息" />        </LinearLayout>        <ImageView            android:id="@+id/imageView2"            android:layout_width="40dp"            android:layout_height="40dp"            android:layout_alignParentEnd="true"            android:layout_centerVertical="true"            android:layout_gravity="center"            android:src="@mipmap/third_guide_head_2" />    </RelativeLayout></RelativeLayout>
0 0
原创粉丝点击