Fragment回调Activity的事件分发
做的項目中有個功能通過事件分發(fā)dispatchTouchEvent()點擊輸入框以外關(guān)閉鍵盤,Activity中能夠正常調(diào)用,到了Fragment發(fā)現(xiàn)不能調(diào)用這個方法了,網(wǎng)上查了資料發(fā)現(xiàn)Fragment中是沒有dispatchTouchEvent()事件分發(fā)的,所以只能通過回調(diào)Activity的事件分發(fā)來實現(xiàn)這個功能了。
1、Activity
1-1接口
public interface MyTouchListener {
void onTouchEvent(MotionEvent event);
}
// 保存MyTouchListener接口的列表
private ArrayListmyTouchListeners =new ArrayList<>();
1-2提供給Fragment通過getActivity()方法來注冊自己的觸摸事件的方法
public void registerMyTouchListener(MyTouchListener listener) {
myTouchListeners.add(listener);
}
1-3 提供給Fragment通過getActivity()方法來取消注冊自己的觸摸事件的方法
public void unRegisterMyTouchListener(PledgeLoanActivity.MyTouchListener listener) {
myTouchListeners.remove(listener);
}
1-4 重寫事件分發(fā)方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyTouchListener listener :myTouchListeners) {
listener.onTouchEvent(ev);
} 復(fù)制代碼return super.dispatchTouchEvent(ev);
}
2、Fragment
// 將myTouchListener注冊到分發(fā)列表
((MainActivity)this.getActivity()).registerMyTouchListener(myTouchListener);
ps:通過事件分發(fā)dispatchTouchEvent()點擊輸入框以外關(guān)閉鍵盤
https://www.jianshu.com/p/bade77d6e305
總結(jié)
以上是生活随笔為你收集整理的Fragment回调Activity的事件分发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++函数的一些特性
- 下一篇: 特征值 与特征向量(机器学习算法原理与实