我正在尝试为其中一个 Android 应用程序实现一个简单的聊天系统。我正在使用ChatKit,我想将自定义内容消息用作 PDF 或视频消息,所以这就是我所做的
1-我创建了一个扩展 MessageContentType 接口的 CustomMessageContentType 接口
public interface CustomMessageContentType extends MessageContentType {
interface PDF extends IMessage {
@Nullable
String getPDFUrl();
}
interface Video extends IMessage {
@Nullable
String getVideoUrl();
}
2- 我让 ChatMessage 实现了 IMessage、CustomMessageContentType.PDF、CustomMessageContentType.Video、MessageContentType
3-然后我让 ChatFragments 实现 ContentChecker 并像这样覆盖 hasContentFor 方法
override fun hasContentFor(message: ChatMessage?, type: Byte): Boolean {
if (type == CONTENT_TYPE_PDF) {
return message?.pdfUrl != null && message?.pdfUrl?.isNotEmpty()!!
} else if (type == CONTENT_TYPE_VID) {
return message?.videoUrl != null && message?.videoUrl?.isNotEmpty()!!
} else {
return false
}
}
message?.pdfUrl 和 message?.videoUrl 总是为空
4-我注册了这样的自定义布局
val holdersConfig = MessageHolders()
.registerContentType(
CONTENT_TYPE_PDF,
CustomIncomingPdfMessageViewHolder::class.java,
R.layout.item_custom_incoming_pdf_message,
CustomOutcomingPdfMessageViewHolder::class.java,
R.layout.item_custom_outcoming_pdf_message,
this
)
.registerContentType(
CONTENT_TYPE_VID,
CustomIncomingVideoMessageViewHolder::class.java,
R.layout.item_custom_incoming_video_message,
CustomOutcomingVideoMessageViewHolder::class.java,
R.layout.item_custom_outcoming_video_message,
this
)
5-最后,当消息来自 API 时,我检查了消息的类型
if (attachments.endsWith(".pdf"){
chatMessage = MessageFixture.getPDFMessage(e)
chatMessagesList.add(chatMessage!!)
} else if (attachments.endsWith(".mp4")) {
chatMessage = MessageFixture.getVideoMessage(e)
chatMessagesList.add(chatMessage!!)
}
adapter.addToEnd(chatMessagesList, true)
只有文本和图像消息正确显示,但 pdf 和视频消息没有出现,我在这里做错了吗?