EaseIMKit 是基于环信 IM SDK 的一款 UI 组件库,它提供了一些通用的 UI 组件,例如‘会话列表’、‘聊天界面’和‘联系人列表’等,开发者可根据实际业务需求通过该组件库快速地搭建自定义 IM 应用。
EaseIMKit 中的组件在实现 UI 功能的同时,调用 IM SDK 相应的接口实现 IM 相关逻辑和数据的处理,因而开发者在使用 EaseIMKit 时只需关注自身业务或个性化扩展即可。本篇文章,我们将主要教大家如何实现会话列表功能
EaseIMKit 提供了 EaseConversationListFragment
,需要将其或者其子类添加到 Activity 中。开发者需要对刷新事件(新消息,删除消息,删除会话等)进行处理。
创建子类 ConversationFragment
继承 EaseConversationListFragment
;
注: super.initData()
指向父类的方法加载本地会话列表;
1)只取本地的会话列表;
public class ConversationListFragment extends EaseConversationListFragment {
@Override
public void initView(Bundle savedInstanceState) {
super.initView(savedInstanceState);
}
}
2)当需要从服务端拉取会话列表时,可以在满足条件时,从服务端拉取,不满足条件的话,从本地获取;
@Override
public void initData() {
//需要两个条件,判断是否触发从服务器拉取会话列表的时机,一是第一次安装,二则本地数据库没有会话列表数据
if(DemoHelper.getInstance().isFirstInstall()
&& EMClient.getInstance().chatManager().getAllConversations().isEmpty()) {
// limit: 每页返回的会话数。取值范围为 [1,50]。
// cursor: 开始获取数据的游标位置。若获取数据时传 `null` 或者空字符串(""),SDK 从最新活跃的会话开始获取。
int limit = 10;
String cursor = "";
EMClient.getInstance().chatManager().asyncFetchConversationsFromServer(limit, cursor,
new EMValueCallBack<EMCursorResult<EMConversation>>() {
@Override
public void onSuccess(EMCursorResult<EMConversation> result) {
// 获取到的会话列表
List<EMConversation> conversations = result.getData();
// 下一次请求的 cursor
String nextCursor = result.getCursor();
}
@Override
public void onError(int error, String errorMsg) {
}
});
}else {
super.initData();
}
}
@Override
public void initView(Bundle savedInstanceState) {
super.initView(savedInstanceState);
//添加搜索会话布局
View view = LayoutInflater.from(mContext).inflate(R.layout.demo_layout_search, null);
llRoot.addView(view, 0);
}
重写父类的onMenuItemClick
方法;
@Override
public boolean onMenuItemClick(MenuItem item, int position) {
EaseConversationInfo info = conversationListLayout.getItem(position);
Object object = info.getInfo();
if(object instanceof EMConversation) {
switch (item.getItemId()) {
case R.id.action_con_make_top :
conversationListLayout.makeConversationTop(position, info);
return true;
case R.id.action_con_cancel_top :
conversationListLayout.cancelConversationTop(position, info);
return true;
case R.id.action_con_delete :
conversationListLayout.deleteConversation(position, info);
return true;
}
}
return super.onMenuItemClick(item, position);
}
conversationListLayout.loadDefaultData();
private void refreshList() {
conversationListLayout.loadDefaultData();
}
@Override
public void initView(Bundle savedInstanceState) {
super.initView(savedInstanceState);
//添加空页面
conversationListLayout.getListAdapter().setEmptyLayoutId(R.layout.ease_layout_default_no_data);
}
重写父类onItemClick
方法;
@Override
public void onItemClick(View view, int position) {
super.onItemClick(view, position);
Object item = conversationListLayout.getItem(position).getInfo();
if(item instanceof EMConversation) {
if(EaseSystemMsgManager.getInstance().isSystemConversation((EMConversation) item)) {
SystemMsgsActivity.actionStart(mContext);
}else {
ChatActivity.actionStart(mContext, ((EMConversation)item).conversationId(), EaseCommonUtils.getChatType((EMConversation) item));
}
}
}
按照以上步骤,就完成了EaseIMKit会话列表的基本功能,如果实现会话列表其他功能,请参考官方文档
注册环信即时通讯IM:https://console.easemob.com/user/register
环信IM集成文档:https://docs-im-beta.easemob.com/document/ios/quickstart.html