做的项目用到云信,想要一个可以无论入口在哪里点击聊天界面的返回键都返回到聊天列表界面。研究了现在常用的微信和qq发现他们的功能就是这样实现,不幸的是云信的demo 没有实现这一功能,这就需要自己去写了,不说废话了上代码。
1、写一个返回用的接口,并给定方法
public interface SessionBackListener {
//点击返回键的监听事件,回到message的chat界面
void onBackClicked(Context context);
}
2、在云信的能力输出 类NimUIkit定义监听器,添加获取方法
//聊天界面返回按钮的监听事件 private static SessionBackListener backListener; /** * 设置聊天界面的事件监听器 * * @param sessionListener */ public static void setSessionBackListener(SessionBackListener sessionListener) { NimUIKit.backListener = sessionListener; } /** * 获取聊天界面事件监听器 * * @return */
public static SessionBackListener getSessionBackListener() { return backListener; } 3、在UIKit的自定义消息界面的用法展示类SessionHepler中注册
public static void init() { setSessionBackListener(); }
private static void setSessionBackListener() { SessionBackListener listener = new SessionBackListener() { @Override public void onBackClicked(Context context) {
4、重写聊天界面所在的activity的onBackPressed的方法//MainActivity是聊天列表fragment 所在的activity Intent intent = new Intent(context,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("BACK", true); context.startActivity(intent); } }; NimUIKit.setSessionBackListener(listener); }
@Override public void onBackPressed() {
if (messageFragment == null || !messageFragment.onBackPressed()) { if (NimUIKit.getSessionBackListener() != null) { NimUIKit.getSessionBackListener().onBackClicked(this); } else { super.onBackPressed(); } super.onBackPressed(); } }
这样无论聊天界面的入口在哪里,点击聊天界面的返回键都会回到聊天列表fragment所在的MainActivity中。