我正在使用JavaFX构建聊天应用。现在,对于聊天消息显示,我使用一个简单的 id name date
1 prabhat 22-12-1989
2 Ashok 20-12-1978
3 prabhat 22-12-1986
4 Ashok 20-12-1974
5 prabhat 22-12-1889
6 Ashok 20-12-1900
ListView
个自定义单元格工厂ChatItem
。
ChatCell
可以是ChatItem
(服务器公告,状态更改等),也可以是ChatLabel
(由自己或其他方发送的消息)。 ChatMessage
可以展开以显示各种内容(目前仅ChatMessage
和ChatTextMessage
)
我的自定义单元格会检查项目的类型/特征,并相应地提供正确的视图。
我想在聊天气泡右下角的每个ChatImageMessage
视图上显示时间戳。但如果文本只有一行,我希望时间戳显示在文本右侧的额外空格上。 (有点像WhatsApp聊天或大多数聊天应用程序)。
这是一个演示:
我当前的实现(在演示中显示)使用ChatMessage
中的布尔属性来确定视图是否应该是多行的。它会在每次更新时检查它。我还添加了一个ChatMessage
宽度的监听器,并在它发生变化时调用ListView
。所有这一切似乎都过分了。我不认为在“模型”中添加“视图相关”属性是一个很好的设计。更不用说在第一项更新时,由于某种原因,时间戳不在正确的位置。
我该如何正确地做到这一点?
更新1:
我为refresh()
项添加了一个属性提取器,并为宽度更改调用ListView
的{{1}}宽度添加了一个侦听器。现在我不必致电ListView
这是updateItem
类:
refresh()