Автоматическое отключение / включение прослушивателя на основе видимости его фрагмента


В приложении для Android у меня есть два фрагмента :

  1. Фрагмент с ListView элементов

  2. Фрагмент с ImageView

Через callback onListItemSelected, когда пользователь нажимает на элемент ListView, MainActivity помещает ImageView в стек, и фрагмент с изображением появляется на экране. На этом этапе я ожидал бы, что, поскольку фрагмент ListView больше не виден, любые события, связанные с этот осколок больше не стрелял. Но это не так. Если я коснусь ImageView, прослушиватели элементов ListView по-прежнему будут работать.

Два вопроса:

  1. Есть ли способ автоматически включать / отключать прослушиватели на основе их видимости фрагментов?

  2. Если нет, я думаю, что путь к этому будет состоять в том, чтобы отключить представление фрагмента ListView, а затем снова включить его, когда нажата задняя кнопка. Как я могу захватить событие backButton в MainActivity, чтобы повторно включить ранее отключенное представление?

Public class MainActivity расширяет реализацию FragmentActivity ListViewFragment.Обратные вызовы {

[...]

       public void onListItemSelected(String str) {


          FragmentManager fragmentManager = getSupportFragmentManager();
          FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();       

          fragmentTransaction.addToBackStack(null);
          fragmentTransaction.replace(R.id.listView, f);
          fragmentTransaction.commit();

          // disable listView 
          //View lw = getSupportFragmentManager().findFragmentById(R.id.listView).getView().findViewById(R.id.my_listView);
          //lw.setEnabled(false);

       }
1 2

1 ответ:

Вы можете попробовать две вещи

  1. Установите ImageView для использования сенсорных событий.

    ImageView.setClickable(true);

  2. При нажатии на новый фрагмент отключите события касания в ListView.

    ListView.setClickable(false);

Если вы хотите знать, как узнать, когда удаляется фрагмент с ImageView, попробуйте setTargetFragment. Взгляните сюда: https://stackoverflow.com/a/13733914/935421