圈组广场介绍
更新时间: 2024/07/26 13:39:23
圈组的社区广场,是社区的集合展示,支持无上限人数、话题分组、以及自定义的权限管理。
技术原理
目前广场实现逻辑是通过约定协议向外部请求社区广场所需要的数据,然后根据自身的业务场景回填广场数据,内部会根据填入的数据进行展示。
同时,内部的点击操作也会同步给外部监听,可以根据自身的业务逻辑自定义跳转,目前圈组 Demo 的展现形式是跳转到社区列表,社区列表以游客的形式展示(未加入的情况),如果已加入就跳转到社区列表,并定位到对应的社区数据。
效果展示
前提条件
已集成圈组界面。
主要协议数据对象
外部需要传入的数据
以下为广场需要外部传入的数据:
QChatServerInfo
社区广场
参数名 | 参数类型 | 参数说明 |
---|---|---|
serverId | Long | 圈组服务器 ID |
name | String | 社区名称 |
iconUrl | String | 图标 |
custom | String | 自定义扩展 |
owner | String | 所有者 |
memberCount | Int | 成员数 |
inviteMode | Int | 邀请模式 |
applyMode | Int | 申请模式 |
valid | Boolean | 有效标志:false-无效,true-有效 |
createTime | Long | 创建时间戳 |
updateTime | Long | 更新时间戳 |
custom | String | 自定义扩展信息 |
QChatSquarePageInfo
广场类型数据
参数名 | 参数类型 | 参数说明 |
---|---|---|
serverType | int | 广场数据的类型,后续请求具体 TAB 下对应的数据,会传给外部 |
title | string | TAB 显示的标题文案 |
广场模块相关协议
Javapublic interface RequesterForSquareInfo {
// 获取广场顶部Tab数据回调协议
void requestSquareSearchType(FetchCallback<ResultInfo<List<QChatSquarePageInfo>>> callback);
// 获取广场Tab下对应的广场列表数据
void requestServerInfoForSearchType(
int searchType, FetchCallback<ResultInfo<List<QChatServerInfo>>> callback);
}
public interface IQChatSquareCallback {
// 点击具体广场社区回调 serverInfo 点击的社区信息,joined 标识当前用户是否已经加入此社区
void onEnterQChatServer(QChatServerInfo serverInfo, boolean joined);
}
广场模块初始化
java// 构建广场实例
QChatSquareFragment mQChatSquareFragment = new QChatSquareFragment();
// 设置广场点击回调
mQChatSquareFragment.setQChatSquareCallback(new IQChatSquareCallback() {
@Override
public void onEnterQChatServer(QChatServerInfo serverInfo, boolean joined) {
// 用于进行广场跳转圈组行为
}
});
// 配置广场数据源请求
SquareDataSourceHelper
.getInstance()
.configRequester(new SquareDataSourceHelper.RequesterForSquareInfo() {
@Override
public void requestSquareSearchType(FetchCallback<ResultInfo<List<QChatSquarePageInfo>>> callback) {
// 请求广场顶部 title 列表,实现网络请求数据,请求到数据后通过 callback 传递具体数据
}
@Override
public void requestServerInfoForSearchType(int searchType, FetchCallback<ResultInfo<List<QChatServerInfo>>> callback) {
// 请求广场具体某一类型数据,searchType 为具体请求的数据类型,实现网络请求数据,请求到数据后通过 call 传递
}
});
广场模块实现示意代码
该代码仅用于参考其实现广场模块的思路和逻辑,不能直接复制运行,请根据您自身的业务逻辑具体实现。
代码中主要是广场数据回填逻辑。
javapublic void onEnterQChatServer(QChatServerInfo serverInfo, boolean joined) {
// 圈组页面提供的方法,进入对应的圈组社区
mQChatServerFragment.enterQChatServer(serverInfo, new FetchCallbackImpl<Boolean>() {
@Override
public void onSuccess(@Nullable Boolean param) {
// 进入成功,进行tab切换
if(param!=null && param){
activityMainBinding.qchatBtnGroup.performClick();
} else {
Toast.makeText(getApplicationContext(), "进入社区失败", Toast.LENGTH_SHORT).show();
}
}
});
}
public void requestSquareSearchType(
FetchCallback<ResultInfo<List<QChatSquarePageInfo>>> callback) {
// 获取圈组广场顶部 title 信息
callback.onSuccess(new ResultInfo<>(Arrays.asList(
new QChatSquarePageInfo("推荐",1),
new QChatSquarePageInfo("体育",2)
)));
}
// 注意此处的数据为伪造数据,点击广场列表无法正确进入社区列表
public void requestServerInfoForSearchType(
int searchType, FetchCallback<ResultInfo<List<QChatServerInfo>>> callback) {
// 获取圈组广场具体 type 下的服务器列表数据
List<QChatServerInfo> serverInfoList = new ArrayList<>();
if (searchType == 1) {
serverInfoList.add(new QChatServerInfo(0,"血染钟楼","https://yx-web-nosdn.netease.im/common/bcbb1f2d82e8e271070994faf650b231/社区5.webp","{\"topic\":\"这里是一个讨论和分享这款桌游的平台!\"}"));
serverInfoList.add(new QChatServerInfo(1,"韩流看这里","https://yx-web-nosdn.netease.im/common/9c7c4be8a8aa9cafd2f8de75b7debeaa/社区4.jpeg","{\"topic\":\"这里提供最新的韩国明星新闻、音乐、综艺节目和流行文化等内容。\"}"));
} else if (searchType == 2) {
serverInfoList.add(new QChatServerInfo(2,"球迷之家","https://yx-web-nosdn.netease.im/common/58b014ae2b11696018e617ae950629a8/社区1.jpeg","{\"topic\":\"不管篮球足球羽毛球,不论男女老少,是球迷你就来\"}"));
serverInfoList.add(new QChatServerInfo(3,"NBA ","https://yx-web-nosdn.netease.im/common/247c31d7e6741c7d2d983ab940ddc187/社区2.jpeg","{\"topic\":\"欢迎加入我们,这里是全球最热门的篮球迷交流平台之一。\"}"));
}
callback.onSuccess(new ResultInfo<>(serverInfoList));
}
此文档是否对你有帮助?