Is there an equivalent for dispatchTouchEvent() from Activity in Dialog or DialogFragment
Asked Answered
O

2

7

I need to intercept all touch events in the application to monitor for a custom activity time out.

Currently I use dispatchTouchEvent() in my activities but this is not called if I have a dialog on the screen. Does any one know if there any way I can have this same functionality with a dialog being present?

Thanks

Oftentimes answered 15/4, 2013 at 20:36 Comment(4)
Did you ever get a answer to this?Outherod
Nope never did, but I am not working on the project any more.Oftentimes
@Oftentimes @Jailbroken I did try this I called dispatchTouchEvent() on the Activity from the Dialog's dispatchTouchEvent(). However implementing this turned a little nasty for me since I found that this does not work for ListView and GridView's OnItemClickListener i.e. you don't get any callbacks (Only on some devices). All the other views and layouts worked fine though!Wingding
Any solution for this issue @WingdingPivot
C
9

For use dispatchTouchEvent() in DialogFragment, override onCreateDialog and return a custom Dialog with dispatchTouchEvent (in your custom DialogFragment).

Exemple, for dismiss keyboard when click outside in DialogFragment:

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new Dialog(getActivity(), getTheme()) {
        @Override
        public boolean dispatchTouchEvent(@NonNull MotionEvent motionEvent) {
            if (getCurrentFocus() != null) {
                InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            }
            return super.dispatchTouchEvent(motionEvent);
        }

    };
}
Chemnitz answered 13/2, 2017 at 12:34 Comment(0)
Y
2

Enjoy a Kotlin version everyone:

abstract class BaseDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return object : Dialog(requireContext()){
            override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
                // do your thing here
                return super.dispatchTouchEvent(ev)
            }
        }
    }

}
Yeung answered 21/5, 2021 at 10:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.