Android聊天气泡左右错乱问题?

wjhui 发布于 2013/07/26 17:08
阅读 601
收藏 0

最近在做一个客户端,要有聊天功能,我是用listView来做的,现在问题就是listview上下滚动时它的item会左右错乱,就是我发的信息变成接受的,或者接受的变成我发的。请教各位有什么办法可以解决??

public View getView(int arg0, View arg1, ViewGroup arg2) {
                // TODO Auto-generated method stub
                ViewHolder holder = null;
                Message msg = msgList.get(arg0);
                if(arg1 == null){
                        holder = new ViewHolder();
                        Log.e("debug", "3333333  " + msg.isMe);
                        MessageLvItem item = new MessageLvItem(context, msg.isMe);
//                        View item = null;
//                        if(msg.isMe){
//                                item = View.inflate(context, R.layout.message_chat_item_send, null);
//                        }
//                        else{
//                                item = View.inflate(context, R.layout.message_chat_item_recv, null);
//                        }
                        arg1 = item;
                        holder.head = item.headIv;
                        holder.content = item.contentTv;
                        holder.time = item.timeTv;
                        arg1.setTag(holder);
                }
                else{
                        holder = (ViewHolder)arg1.getTag();
                }
                 
                holder.head.setImageResource(R.drawable.retouxiang);
                holder.content.setText(msg.mContent);
                holder.time.setText(msg.mTime);
                 
                return arg1;
        }
我在Item里判断接收还是发送

public class MessageLvItem extends RelativeLayout {
        TextView contentTv;
        TextView timeTv;
        ImageView headIv;
 
        public MessageLvItem(Context context, boolean isMe) {
                super(context);
                // TODO Auto-generated constructor stub
                init(context, isMe);
        }
 
        private void init(Context context, boolean isMe) {
                RelativeLayout outer = new RelativeLayout(context);
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT);
                params.topMargin = setDip(context, 10);
                this.addView(outer, params);
                 
                LinearLayout chat_layout = new LinearLayout(context);
                 
                        /////信息
                        RelativeLayout text_layout = new RelativeLayout(context);
                        text_layout.setId(121);
                        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        contentTv = new TextView(context);
                        contentTv.setText("content!");
                        contentTv.setTextColor(Color.BLACK);
                        contentTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
                        contentTv.setId(123);
                        contentTv.setMaxWidth(setDip(context, 250));
                        text_layout.addView(contentTv, params);
                         
                        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        params.addRule(RelativeLayout.BELOW, 123);
//                        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                        timeTv = new TextView(context);
                        timeTv.setText("time");
                        timeTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
                        text_layout.addView(timeTv, params);
                         
                        //头像
                        headIv = new ImageView(context);
                        headIv.setId(122);
                        headIv.setImageResource(R.drawable.retouxiang);
                         
                LinearLayout.LayoutParams lp;
                if(isMe){
                        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                        outer.addView(chat_layout, params);
                         
                        lp = new LinearLayout.LayoutParams(setDip(context, 70), setDip(context, 70));
                        lp.gravity = Gravity.BOTTOM;
                        chat_layout.addView(headIv, lp);
                         
                        text_layout.setBackgroundResource(R.drawable.incoming);
                        lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        chat_layout.addView(text_layout, lp);
                }
                else{
                        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                        outer.addView(chat_layout, params);
                         
                        text_layout.setBackgroundResource(R.drawable.outgoing);
                        lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                        chat_layout.addView(text_layout, lp);
                         
                        lp = new LinearLayout.LayoutParams(setDip(context, 70), setDip(context, 70));
                        lp.gravity = Gravity.BOTTOM;
                        chat_layout.addView(headIv, lp);
                }
        }
         
        public static int setDip(Context context, int pxSrc)
        {
                float sDensity = context.getResources().getDisplayMetrics().density; 
                return (int)(pxSrc * sDensity / 1.5);
        }
 
}

加载中
0
wjhui
wjhui
解决了
0
a
a2843885
说说哪里错了啊,我也学学 @gafei
wjhui
wjhui
重写getItemViewType和getViewTypeCount
返回顶部
顶部