保利威文档中心

幫助中心

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 的通訊。

联系客服,在线咨询