做的項目用到雲信,想要一個可以無論入口在哪裏點擊聊天界面的返回鍵都返回到聊天列表界面。研究了現在常用的微信和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) {
//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);
}
4、重寫聊天界面所在的activity的onBackPressed的方法
@Override
public void onBackPressed() {
if (messageFragment == null || !messageFragment.onBackPressed()) {
if (NimUIKit.getSessionBackListener() != null) {
NimUIKit.getSessionBackListener().onBackClicked(this);
} else {
super.onBackPressed();
}
super.onBackPressed();
}
}