dialog消失会执行setOnDismissListener, 点击OutsideTouch也相当于执行了dismiss,但是要单独监控OutsideTouch则需要写监听事件,fragment监听OutsideTouch的代码如下:
1.在activity里:
/**
* 以下的几个方法用来,让fragment能够监听touch事件
*/
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>();
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
2.fragment
//监听触摸时间
((HomeActivity) getActivity()).registerMyOnTouchListener(mTouchListener);
if (mTouchListener != null) {
((HomeActivity) getActivity()).unregisterMyOnTouchListener(mTouchListener);
}
/**
* 接收Activity的Touch回调的对象
* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
*/
private HomeActivity.MyOnTouchListener mTouchListener = new HomeActivity.MyOnTouchListener() {
@Override
public boolean onTouch(MotionEvent event) {
android.util.Log.d(TAG, "onTouch: ");
if (null != mChooseFilePopup ) {
cancelUpload();
// mChooseFilePopup.dismiss();
}
return true;
}
};