gpt4 book ai didi

java - 每行中具有不同数量的 TextView 的 ListView

转载 作者:行者123 更新时间:2023-11-30 08:48:48 25 4
gpt4 key购买 nike

我的应用程序中有聊天功能,我想对来自同一用户的连续消息进行分组,类似于下图:

Mock-up

因此,我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com