3_5-云课堂场景-聊天室
更新時間:2023-04-17 15:27:57
1 功能概述
聊天室模組包含發言、提問、按讚、歷史記錄、歡迎詞等功能。聊天室模組在 UI、互動、功能上,相較於其他模組,會更複雜且更龐大。因此設計、建置、維護一個聊天室,也是一件較為耗時費力的事情。我們建議直接使用保利威封裝好的聊天室模組,該部分程式碼完全開源,支援直接使用以及二次開發。
2 使用演示
聊天室模組的 UI 佈局在雲課堂場景分為三個部分,在頁面選單包括聊天 tab、提問 tab 兩個部分,橫向的播放器區域也包括聊天 layout 部分。以下範例為頁面選單中新增聊天 tab,程式碼如下:
//聊天室mvp-presenter
private IPLVChatroomContract.IChatroomPresenter chatroomPresenter;
private void addChatTab(PolyvLiveClassDetailVO.DataBean.ChannelMenusBean channelMenusBean) {
//页面菜单添加聊天tab的标题
pageMenuTabTitleList.add(channelMenusBean.getName());
//聊天fragment
chatFragment = new PLVLCChatFragment();
//初始化聊天列表
chatFragment.init(chatCommonMessageList);
//配置聊天页面所需的数据
chatFragment.setIsLiveType(liveRoomDataManager.getConfig().isLive());
//配置聊天页面的UI交互监听器
chatFragment.setOnViewActionListener(new PLVLCChatFragment.OnViewActionListener() {
@Override
public void onShowBulletinAction() {
//...
}
});
//聊天室mvp-presenter注册聊天室mvp-view
chatroomPresenter.registerView(chatFragment.getChatroomView());
//页面菜单添加聊天tab
pageMenuTabFragmentList.add(chatFragment);
}
3 實作介紹
3.1 PLVLCChatFragment
雲課堂場景下的互動聊天 tab 頁,包含聊天資訊列表、傳送資訊輸入框、表情佈局、按讚佈局、歡迎詞、公告等元素。該類和聊天室 mvp-presenter 的通訊,是透過該類中定義的聊天室 mvp-view,當呼叫聊天室 mvp-presenter 的 registerView 方法後,聊天室 mvp-presenter 即可通知聊天室 mvp-view 的更新,同時聊天室 mvp-view 也能呼叫聊天室 mvp-presenter 的方法。定義聊天室 mvp-view 的範例程式碼:
//聊天室mvp-presenter
private IPLVChatroomContract.IChatroomPresenter chatroomPresenter;
//聊天室mvp-view
private IPLVChatroomContract.IChatroomView chatroomView = new PLVAbsChatroomView() {
@Override
public void setPresenter(@NonNull IPLVChatroomContract.IChatroomPresenter presenter) {
super.setPresenter(presenter);
chatroomPresenter = presenter;
}
@Override
public void onSpeakEvent(@NonNull PLVSpeakEvent speakEvent) {
super.onSpeakEvent(speakEvent);
}
@Override
public void onImgEvent(@NonNull PLVChatImgEvent chatImgEvent) {
super.onImgEvent(chatImgEvent);
}
@Override
public void onLikesEvent(@NonNull PLVLikesEvent likesEvent) {
super.onLikesEvent(likesEvent);
}
@Override
public void onLoginEvent(@NonNull PLVLoginEvent loginEvent) {
super.onLoginEvent(loginEvent);
}
@Override
public void onLogoutEvent(@NonNull PLVLogoutEvent logoutEvent) {
super.onLogoutEvent(logoutEvent);
}
@Override
public void onBulletinEvent(@NonNull PolyvBulletinVO bulletinVO) {
super.onBulletinEvent(bulletinVO);
}
@Override
public void onRemoveBulletinEvent() {
super.onRemoveBulletinEvent();
}
@Override
public void onCloseRoomEvent(@NonNull final PLVCloseRoomEvent closeRoomEvent) {
super.onCloseRoomEvent(closeRoomEvent);
}
@Override
public void onRemoveMessageEvent(@Nullable String id, boolean isRemoveAll) {
super.onRemoveMessageEvent(id, isRemoveAll);
}
@Override
public void onCustomGiftEvent(@NonNull PolyvCustomEvent.UserBean userBean, @NonNull PLVCustomGiftBean customGiftBean) {
super.onCustomGiftEvent(userBean, customGiftBean);
}
@Override
public void onLocalSpeakMessage(@Nullable PolyvLocalMessage localMessage) {
super.onLocalSpeakMessage(localMessage);
}
@Override
public void onLocalImageMessage(@Nullable PolyvSendLocalImgEvent localImgEvent) {
super.onLocalImageMessage(localImgEvent);
}
@Override
public void onSpeakImgDataList(List<PLVBaseViewData> chatMessageDataList) {
super.onSpeakImgDataList(chatMessageDataList);
}
@Override
public void onHistoryDataList(List<PLVBaseViewData<PLVBaseEvent>> chatMessageDataList, int requestSuccessTime, boolean isNoMoreHistory, int viewIndex) {
super.onHistoryDataList(chatMessageDataList, requestSuccessTime, isNoMoreHistory, viewIndex);
}
@Override
public void onHistoryRequestFailed(String errorMsg, Throwable t, int viewIndex) {
super.onHistoryRequestFailed(errorMsg, t, viewIndex);
}
};
3.2 PLVLCChatLandscapeLayout
雲課堂場景下的橫向聊天佈局,該類和 PLVLCChatFragment 一樣,都能顯示聊天列表資訊、載入歷史記錄,是在橫向顯示時的一個聊天區域。該類中也定義了聊天室 mvp-view,負責與聊天室 mvp-presenter 的通訊。
3.3 PLVLCQuizFragment
雲課堂場景下的諮詢提問 tab 頁,主要是用於向講師提問題的聊天頁面,這個頁面傳送的資訊只有講師能夠看到。該類中也定義了聊天室 mvp-view,負責與聊天室 mvp-presenter 的通訊。
