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
- listview的Adapter使用布局实现消息模块左右两边消息的显示布局遇到的问题
- 聊天界面的制作(二)——发送消息后ListView左右布局显示
- listview显示多布局的时候遇到的问题
- 单行左右两边的对称布局的更好的实现方式
- ListView Adapter适配器的布局实例及相关问题
- android 实现listview的adapter多种布局方式
- Adapter类型控件之ListView Item多布局的实现
- listview的布局问题
- 使用ListView制作表格样式以及消息提示小图标的布局
- 使用ListView制作表格样式以及消息提示小图标的布局
- 左右两边div布局
- ListView的多布局显示
- ListView的多布局显示
- 使用ListView实现界面的布局
- 使用autoLayout布局遇到的问题
- UIScrollView 使用AutoLayout布局遇到的问题
- 使用PostThreadMessage发送消息遇到的问题
- Android-viewpager显示左右两边的View
- 滚动窗口,Edit背景框变黑
- 35 个 Java 代码性能优化总结
- JavaWeb应用开发概述
- cardview 报了一个 android.view.InflateException: Binary XML file line # 异常
- Android发展历史
- listview的Adapter使用布局实现消息模块左右两边消息的显示布局遇到的问题
- hadoop安装之-hive
- 【总结】10月训练赛第2场(巴蜀)
- lua工具库penlight(转)
- 修复CocoaPods更新错误
- C++必读书籍推荐
- GDAL线面互转换
- 写给未来的你——余光中
- JAVA正则表达式过滤出中文、字母、数字