解决方案 »

  1.   

    提供一种思路哈,左右并不是根据判断1,2去画的,而是根据1,2,去具体显示,item包含两行,为1的时候,第一行显示,第二行gone,为2的时候,第一行为gone,第二行显示,这就可以了,何必重新getview了
      

  2.   

    看不出这有在复用convertView,convertView是参数传进来的,每次getView都是一个指针不一样的对象,又不是全局变量。
    我觉得可以不用View convertView1,convertView2啊,你这么搞的关键点在哪里
      

  3.   

    汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了
      

  4.   

    汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了所以你可以换我种思路呗,我是实现过的,,,
      

  5.   

    汗,发现去掉的效果是一样的,现在得到的ListView滚动一下就变一下,都不知道哪里出问题了所以你可以换我种思路呗,我是实现过的,,,
    好吧,那我现在的item变成三行了,我的时间也是写成一行隐藏起来的
      

  6.   

     
    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;
    }}我是这样处理的 希望可以帮助到你
      

  7.   

    我之前在网上好像又看到过类似的,不知道是不是我用法不对,我这样做拖动快一点还是会OOM,现在已经用了1楼的方法,全写在一个Item里面,暂时好像没什么问题...