我的应用程序中有聊天功能,我想对来自同一用户的连续消息进行分组,类似于下面的图片:
因此,我的 message_row.xml
带有一个 TextView 来显示一条消息的内容。我的消息模型有一个 ArrayList,其中包含来自同一用户的所有顺序消息。
我的CustomMessageAdapter.java
看起来像这样:
if (inflater == null) {
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// [...]
if (getItemViewType(position) == MINE) {
convertView = inflater.inflate(R.layout.my_message_row, null);
} else {
convertView = inflater.inflate(R.layout.message_row, null);
}
// [...]
TextView senderName = (TextView) convertView.findViewById(R.id.senderName);
TextView content = (TextView) convertView.findViewById(R.id.content);
senderName.setText(message.getSenderName());
//I want to do something like this:
for (int i = 0; i < message.getMessages().size(); i++) {
// display a different TextView for each different message...
}
// [...]
return convertView;
我无法做的是为 messages
arraylist 中的每个不同消息显示一个新的 TextView。
最佳答案
由于膨胀 View 类的成本很高并且更新它们也可能很昂贵,因此采取更简单的方法来解决这个问题是明智的。我建议简单地将字符串与换行符分隔符连接起来,并将整个字符串应用到消息中。
进一步的想法
如果您需要对文本的显示进行复杂的控制,请考虑使用 Spannable 在单个 TextView 内设置文本格式。
http://developer.android.com/reference/android/text/Spannable.html
如下所示:Is there any example about Spanned and Spannable text
spanbuffer = new TextView(context);
spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
Spannable s = (Spannable) spanbuffer.getText();
s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
this.append(s);
您可以通过这种方式控制多个文本属性。
关于java - 每行具有不同数量 TextView 的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733487/