????做的項目中有個功能通過事件分發(fā)dispatchTouchEvent()點擊輸入框以外關閉鍵盤摹芙,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);
? ? }
return super.dispatchTouchEvent(ev);
}
2絮蒿、Fragment
// 將myTouchListener注冊到分發(fā)列表
((MainActivity)this.getActivity()).registerMyTouchListener(myTouchListener);
ps:通過事件分發(fā)dispatchTouchEvent()點擊輸入框以外關閉鍵盤
http://www.reibang.com/p/bade77d6e305