detect click out of fragment

1

I have a fragment that I need to close when I click away from it, this is the code I have:

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Rect dialogBounds = new Rect();
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragmentoLeyes);
        if (currentFragment!=null) {
            currentFragment.getView().getHitRect(dialogBounds);
            if (currentFragment instanceof VideoFragment) {
                if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
                    onBackPressed();
                }
            }
        }
        return super.dispatchTouchEvent(ev);
    }

The problem with the code is that when I click inside the fragment, it closes it and I only need it to close when the click or tap is out of this

    
asked by zhet 12.04.2018 в 09:08
source

1 answer

0

The best thing in this case is to overwrite the onTouchEvent() method, by touching the Fragment it detects the coordinates using a Rect :

          Rect r = new Rect(0, 0, 0, 0);
            currentFragment.getView().getHitRect(r);
            boolean  intersects = r.contains((int) event.getX(), (int) event.getY());

and this will determine if you are touching outside the Fragment to proceed to eliminate it.

This would be an example:

@Override
public boolean onTouchEvent (MotionEvent event) {

    if (event.getAction () == MotionEvent.ACTION_DOWN) {

            Rect r = new Rect(0, 0, 0, 0);
            currentFragment.getView().getHitRect(r);
            boolean  intersects = r.contains((int) event.getX(), (int) event.getY());

        if (!intersects) {
            Log.d(TAG, "Pressing INSIDE the Fragment.\nRemoving Fragment!!!");
            FragmentTransaction fragmentTransaction;
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.remove(currentFragment).commit();

            return true;
        }
    }
    return super.onTouchEvent (event);
}
    
answered by 13.04.2018 / 01:10
source