关于adapter中getView()的复用 内存泄漏布局listview聊天convertView 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提供一种思路哈,左右并不是根据判断1,2去画的,而是根据1,2,去具体显示,item包含两行,为1的时候,第一行显示,第二行gone,为2的时候,第一行为gone,第二行显示,这就可以了,何必重新getview了 看不出这有在复用convertView,convertView是参数传进来的,每次getView都是一个指针不一样的对象,又不是全局变量。我觉得可以不用View convertView1,convertView2啊,你这么搞的关键点在哪里 汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了 汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了所以你可以换我种思路呗,我是实现过的,,, 汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了所以你可以换我种思路呗,我是实现过的,,,好吧,那我现在的item变成三行了,我的时间也是写成一行隐藏起来的 package com.chat.demo.activity;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.chat.demo.R;public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { ctx = context; this.coll = coll; mInflater = LayoutInflater.from(context); } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) { return IMsgViewType.IMVT_COM_MSG; } else { return IMsgViewType.IMVT_TO_MSG; } } public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } public View getView(int position, View convertView, ViewGroup parent) { ChatMsgEntity entity = coll.get(position); boolean isComMsg = entity.getMsgType(); ViewHolder viewHolder = null; if (convertView == null) { if (isComMsg) { convertView = mInflater.inflate( R.layout.chatting_item_msg_text_left, null); } else { convertView = mInflater.inflate( R.layout.chatting_item_msg_text_right, null); } viewHolder = new ViewHolder(); viewHolder.tvSendTime = (TextView) convertView .findViewById(R.id.tv_sendtime); viewHolder.tvUserName = (TextView) convertView .findViewById(R.id.tv_username); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tv_chatcontent); if (!isComMsg) { viewHolder.ivSuc = (ImageView) convertView .findViewById(R.id.iv_succ); } viewHolder.isComMsg = isComMsg; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.getDate()); viewHolder.tvUserName.setText(entity.getName()); viewHolder.tvContent.setText(entity.getText()); if (!isComMsg) { if (!entity.getSucMeg()) { viewHolder.ivSuc.setVisibility(View.VISIBLE); } else { viewHolder.ivSuc.setVisibility(View.GONE); } } return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public ImageView ivSuc; public boolean isComMsg = true; }}我是这样处理的 希望可以帮助到你 我之前在网上好像又看到过类似的,不知道是不是我用法不对,我这样做拖动快一点还是会OOM,现在已经用了1楼的方法,全写在一个Item里面,暂时好像没什么问题... 高手求助,tab中的图片为什么不能完全填充 【咨询】想买一款便宜的Android手机,其版本Android是否可以升级? [求助]GridView载入过慢问题 一个android avd上运行多个项目 onKeyLongPress防重入 关于android: 解析xml文件,存入sqlite的问题 android代码问题:public SpeakContact getContact(long id) 在绝对定位中,如何在java代码中改变图片的x和y坐标 如何给设置边框线为双线? android studio运行编译出错 关于ADT中log的问题,求大神解决 android wifi定位设置
我觉得可以不用View convertView1,convertView2啊,你这么搞的关键点在哪里
好吧,那我现在的item变成三行了,我的时间也是写成一行隐藏起来的
package com.chat.demo.activity;import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.chat.demo.R;public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType {
int IMVT_COM_MSG = 0;
int IMVT_TO_MSG = 1;
} private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) {
ctx = context;
this.coll = coll;
mInflater = LayoutInflater.from(context);
} public int getCount() {
return coll.size();
} public Object getItem(int position) {
return coll.get(position);
} public long getItemId(int position) {
return position;
} public int getItemViewType(int position) {
// TODO Auto-generated method stub
ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) {
return IMsgViewType.IMVT_COM_MSG;
} else {
return IMsgViewType.IMVT_TO_MSG;
} } public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
} public View getView(int position, View convertView, ViewGroup parent) { ChatMsgEntity entity = coll.get(position);
boolean isComMsg = entity.getMsgType(); ViewHolder viewHolder = null;
if (convertView == null) {
if (isComMsg) {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_left, null);
} else {
convertView = mInflater.inflate(
R.layout.chatting_item_msg_text_right, null);
} viewHolder = new ViewHolder();
viewHolder.tvSendTime = (TextView) convertView
.findViewById(R.id.tv_sendtime);
viewHolder.tvUserName = (TextView) convertView
.findViewById(R.id.tv_username);
viewHolder.tvContent = (TextView) convertView
.findViewById(R.id.tv_chatcontent);
if (!isComMsg) {
viewHolder.ivSuc = (ImageView) convertView
.findViewById(R.id.iv_succ); }
viewHolder.isComMsg = isComMsg; convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
} viewHolder.tvSendTime.setText(entity.getDate());
viewHolder.tvUserName.setText(entity.getName());
viewHolder.tvContent.setText(entity.getText());
if (!isComMsg) {
if (!entity.getSucMeg()) {
viewHolder.ivSuc.setVisibility(View.VISIBLE);
} else {
viewHolder.ivSuc.setVisibility(View.GONE);
}
} return convertView;
} static class ViewHolder {
public TextView tvSendTime;
public TextView tvUserName;
public TextView tvContent;
public ImageView ivSuc;
public boolean isComMsg = true;
}}我是这样处理的 希望可以帮助到你