J'écris une petite application de chat de bulle. Maintenant, j'essaie de faire des bulles différentes pour les messages entrants et sortants. Je veux que les messages entrants s'alignent à gauche et en sortie à droite et aussi avec différentes images de fond. Maintenant ça marche. mais parfois le message entrant devient aligné comme sortant. C'est mon code adaptateur de message:article de liste de liste incorrect aligner du code
public class MessageAdapter extends ArrayAdapter
{
protected Context mContext;
protected List<ParseObject> mMessages;
public MessageAdapter(Context context, List<ParseObject> messages)
{
super(context, R.layout.message_item, messages);
mContext=context;
mMessages=messages;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if(convertView==null)
{
convertView = LayoutInflater.from(mContext).inflate(R.layout.message_item, null);
holder = new ViewHolder();
holder.messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
holder.userNameLabel=(TextView)convertView.findViewById(R.id.userNameLabel);
holder.contentLayout=(LinearLayout)convertView.findViewById(R.id.contentLayout);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
ParseObject message=mMessages.get(position);
holder.userNameLabel.setText(message.getString(ParseConstants.KEY_SENDER_NAME));
String msgText=message.getString(ParseConstants.KEY_MESSAGE_TEXT);
holder.messageTextView.setText(msgText);
String msgSenderUsrId=message.getString(ParseConstants.KEY_SENDER_ID);
String msgCurentUsrId=ParseUser.getCurrentUser().getObjectId();
// if msgCurentUsrId equфls to msgSenderUsrId
// then this is outcoming message
// changing align and background image
if(msgSenderUsrId.equals(msgCurentUsrId))
{
holder.contentLayout.setBackgroundResource(R.drawable.out_message_bg);
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.RIGHT;
holder.contentLayout.setLayoutParams(lp);
//holder.contentLayout.setVerticalGravity(Gravity.RIGHT);
}
return convertView;
}
public class ViewHolder
{
TextView messageTextView;
TextView userNameLabel;
LinearLayout contentLayout;
}
public void refill(List<ParseObject> messages)
{
mMessages.clear();
mMessages.addAll(messages);
notifyDataSetChanged();
}
}
Aussi je ne peux pas comprendre pourquoi les appels de méthode getView deux fois. Quelqu'un peut-il m'aider?
des thats travaux, je vous remercie. Mais pourquoi? Dans les éléments de mise en page d'élément, l'arrière-plan et l'alignement définis comme ceci sont des messages entrants. Donc, ceci devrait être un état par défaut. – Gleb
De rien, c'est à cause du [mécanisme de recyclage de ListView] (http://stackoverflow.com/questions/11945563/how-listviews-recycling-mechanism-works) – Rami
merci pour le lien. Très utile. – Gleb