私はチャットアプリケーションを構築しました。
チャット メッセージ アクティビティ内に、すべてのテキスト メッセージを表示する ListView があります。
各テキストメッセージ内には、デフォルトで書き込みを行う TextView があり"Sending..."
、メッセージの送信後に更新したいと考えています。
各 ChatMessage オブジェクト内にsent
andtime
プロパティがあります。送信が true の場合は TextView に時間を表示し、false の場合は"Sending"
上記のように書き込みます。
新しいメッセージを送信しているときに、ListView アダプターに新しいビューを追加しています。何らかの理由で、送信されていないのにメッセージが送信されたことが示されています...理由がよくわかりません。
これは私の ArrayAdapter の getView() およびホルダー クラスです。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ChatMessage chatMessage = chatMessagesArrayList.get(position);
ChatMessageHolder chatMessageHolder = null;
if (row == null)
{
if (chatMessage.getSenderId() == app.getFacebookCurrentUser().getId())
row = LayoutInflater.from(context).inflate(layoutResourceId, null);
else
row = LayoutInflater.from(context).inflate(R.layout.chat_green, null);
chatMessageHolder = new ChatMessageHolder();
chatMessageHolder.message = (TextView) row.findViewById(R.activity_chat.message);
chatMessageHolder.sentTime = (TextView) row.findViewById(R.activity_chat.sent_time);
chatMessageHolder.isSent = chatMessage.isSent();
row.setTag(chatMessageHolder);
}
else
{
chatMessageHolder = (ChatMessageHolder) row.getTag();
}
chatMessageHolder.message.setText(chatMessage.getMessage());
if (chatMessageHolder.isSent)
chatMessageHolder.sentTime.setText(app.getDateTime(chatMessage.getTime()));
return row;
}
private static class ChatMessageHolder
{
TextView message, sentTime;
boolean isSent = false;
}
isSentブール値フラグに従って、なぜ時間または「送信中...」を書き込まないのか、本当に理解できません...