我现在在做一个聊天软件,这两天遇到个纠结的问题,我的聊天页面是一个ListView,item布局是左右的那种,来消息是在左边,type为2,发出在右边,type为1,如果不复用convertView就时不时的出现OOM,可是现在代码如下,麻烦各位看看是不是我的方法有问题,我在geView的时候有时候可能即使type为1却显示在左边,下面贴出主要的getView代码,中间省略了一些资源设置:
public View getView(int position, View convertView, ViewGroup parent){
MessageBean mb = mbList.get(position);
ViewHolder holder = null;
View convertView1,convertView2;
if(mb.getType().equalsIgnoreCase("1")){
convertView1 = convertView;
if(convertView1 == null){
convertView1 = vi.inflate(R.layout.list_say_me_item, null);
holder=new ViewHolder();
holder.tvTime = (TextView) convertView1.findViewById(R.id.tv_sendtime);
holder.tvText = (TextView) convertView1.findViewById(R.id.messagedetail_row_text);
holder.layout = (LinearLayout) convertView1.findViewById(R.id.layout_bj);
convertView1.setTag(holder);
}else{
holder = (ViewHolder) convertView1.getTag();
}
convertView = convertView1;
}else if(mb.getType().equalsIgnoreCase("2")){
convertView2 = convertView;
if(convertView2 == null){
convertView2 = vi.inflate(R.layout.list_say_he_item, null);
holder = new ViewHolder();
holder.tvTime = (TextView) convertView2.findViewById(R.id.tv_sendtime);
holder.tvText = (TextView) convertView2.findViewById(R.id.messagedetail_row_text);
holder.layout = (LinearLayout) convertView2.findViewById(R.id.layout_bj);
convertView2.setTag(holder);
}else{
holder = (ViewHolder) convertView2.getTag();
}
convertView = convertView2;
}
return convertView;
}------解决方案--------------------
提供一种思路哈,左右并不是根据判断1,2去画的,而是根据1,2,去具体显示,item包含两行,为1的时候,第一行显示,第二行gone,为2的时候,第一行为gone,第二行显示,这就可以了,何必重新getview了
------解决方案--------------------
看不出这有在复用convertView,convertView是参数传进来的,每次getView都是一个指针不一样的对象,又不是全局变量。
我觉得可以不用View convertView1,convertView2啊,你这么搞的关键点在哪里