Удаление фрагмента нажатием / касанием снаружи:

У меня есть некоторые фрагменты, которые добавляются и удаляются из RelativeLayout динамически с использованием кода. Один из фрагментов – это ListFragment , и в качестве противопоставления другим моим фрагментам, которые имеют кнопки Close и Save, этот содержит только список.

Моя цель – закрыть / удалить этот фрагмент, щелкнув его вне места в любом месте.

Я нашел следующий код:

 @Override public boolean onTouchEvent(MotionEvent event) { // I only care if the event is an UP action if (event.getAction() == MotionEvent.ACTION_UP) { // create a rect for storing the window rect Rect r = new Rect(0, 0, 0, 0); // retrieve the windows rect this.getWindow().getDecorView().getHitRect(r); // check if the event position is inside the window rect boolean intersects = r.contains((int) event.getX(), (int) event.getY()); // if the event is not inside then we can close the activity if (!intersects) { // close the activity this.finish(); // notify that we consumed this event return true; } } // let the system handle the event return super.onTouchEvent(event); } 

Это закрывает не полноэкранную активность при нажатии за ее пределами, но я просто не понимаю, как найти прямоугольник фрагмента.

Может ли кто-нибудь помочь и указать мне в правильном направлении? Любая помощь будет оценена по достоинству.

Благодарю.

Solutions Collecting From Web of "Удаление фрагмента нажатием / касанием снаружи:"

Ну, я, наконец, понял это:

 @Override public boolean onTouchEvent ( MotionEvent event ) { // I only care if the event is an UP action if ( event.getAction () == MotionEvent.ACTION_UP ) { //and only is the ListFragment shown. if (isListFragmentShown) { // create a rect for storing the fragment window rect Rect r = new Rect ( 0, 0, 0, 0 ); // retrieve the fragment's windows rect currentFragment.getView().getHitRect(r); // check if the event position is inside the window rect boolean intersects = r.contains ( (int) event.getX (), (int) event.getY () ); // if the event is not inside then we can close the fragment if ( !intersects ) { Log.d(TAG, "pressed outside the listFragment"); FragmentTransaction fragmentTransaction; fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.remove(currentFragment).commit(); // notify that we consumed this event return true; } } } //let the system handle the event return super.onTouchEvent ( event ); } 

Вы можете добавить прослушиватель кликов в свой контейнер RelativeLayout. Если фрагмент работает над действием, активируйте слушателя RelativeLayout, поэтому слушатель работает только во время существования фрагмента.