2013-10-29 41 views
0

作为标题说我的项目保持切换行,当我滚动ListView。 我已经在这里阅读过关于同一个问题,但我无法弄清楚我做错了什么。Android-Listview项目在滚动时发生变化

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View row = convertView; 
    RecordHolder holder = null; 
    Object o = getItem(position); 

    if (row == null) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     row = inflater.inflate(R.layout.chatmessageitem,null); 
     holder = new RecordHolder(); 
     holder.txtMessage = (TextView) row.findViewById(R.id.txttextmessage); 
     holder.messageBubble = (ImageView) row.findViewById(R.id.chatbubble); 

     if(o instanceof MessageObject){ 
      MessageObject m = (MessageObject) o; 
      if(m.getEmpfänger() != ((GlobalClass) context).myChatID){ 
       holder.ID = m.getEmpfänger(); 
      }else{ 
       holder.ID =((GlobalClass) context).myChatID; 
      } 

      holder.message =(m.getMessage()); 
     } 
     row.setTag(holder); 
    }else{ 
     holder = (RecordHolder)row.getTag(); 
    } 

    if(o instanceof MessageObject){ 
     MessageObject msg = (MessageObject)o; 
     holder.txtMessage.setText(msg.getMessage()); 

     if(holder.ID != ((GlobalClass) context).myChatID){ 
      holder.messageBubble.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.bubbleone)); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      holder.txtMessage.setText(holder.message); 
      lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      holder.messageBubble.setLayoutParams(lp); 
     }else{ 
      holder.messageBubble.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.bubbletwo)); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
      holder.txtMessage.setText(holder.message); 
      lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      holder.messageBubble.setLayoutParams(lp); 
     } 
    } 
    return row; 
} 

static class RecordHolder { 
    String message; 
    int ID; 
    TextView txtMessage; 
    ImageView messageBubble; 
} 

thx任何回答提前。问候。

+0

为什么Ø不是一个MessageObject在这种情况下,你为什么不?显示任何东西(实际上这意味着不改变可能存在的convertView) – njzk2

回答

1

根据创建视图时的当前MessageObject而不是每个MessageObject设置holder.ID,因为回收视图。然后根据该初始(可能错误)ID设置内容,但使用当前的MessageObject

移动这样的逻辑:

if(o instanceof MessageObject){ 
     MessageObject m = (MessageObject) o; 
     if(m.getEmpfänger() != ((GlobalClass) context).myChatID){ 
      holder.ID = m.getEmpfänger(); 
     }else{ 
      holder.ID =((GlobalClass) context).myChatID; 
     } 

     holder.message =(m.getMessage()); 
    } 

if (row == null) {...} else {...}块之后。 (或者将其纳入以下if(o instanceof MessageObject){...块清晰的代码

0

尝试增加这些方法您的适配器类:

@Override 
    public int getViewTypeCount() { 
    return getCount(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
    return position; 
    } 
+0

OP为什么要“尝试这个代码”?一个好的答案**总是会解释做了什么以及为什么这样做,不仅用于OP,而且用于未来SO的访问者 –

+1

我同意。感谢您的反馈。 – Shrey

相关问题