Динамический широковещательный приемник во фрагменте - PullRequest
22 голосов
/ 05 января 2012

Можно ли динамически зарегистрировать широковещательный приемник во фрагменте для прослушивания изменений состояния подключения? Если так, то как? Если нет, какие есть обходные пути для фрагментов?

РЕДАКТИРОВАТЬ: Чтобы зарегистрировать BroadcastReceiver вам нужен контекст. Поскольку фрагменты находятся внутри действий, возможно, лучший способ получить контекст - просто использовать getActivity (). Однако, как объясняет gnorsilva ниже, есть определенные особые случаи, на которые стоит обратить внимание.

Ответы [ 3 ]

30 голосов
/ 20 января 2012

user853583 предложение является хорошим, но если вам нужен доступ к контексту внутри фрагмента, вы должны использовать getActivity().getApplicationContext()

Вы должны избегать передачи действия в качестве контекста всякий раз, когда это возможно, так как это может привести к утечкам памяти - некоторый объект будет удерживать эту активность после вызова его onDestroy () и не будет собирать мусор.

Сказав это, бывают случаи, когда вам нужно передать действие в качестве контекста, например: для адаптеров списка

Еще две вещи:

  • , поскольку фрагмент прикреплен и отсоединен от действия, иногда getActivity() возвращает ноль - вы можете безопасно вызывать его в определенных методах жизненного цикла, где вы знаете, что действие активно, например: onResume()

  • если ваш фрагмент не сохраняет свой экземпляр, т.е. уничтожается при изменении ориентации, обязательно отмените регистрацию получателя в вашем фрагменте, например, внутри onPause() или onDestroy()

3 голосов
/ 18 января 2012

Насколько я вижу, нет способа зарегистрировать BroadcastReceiver во фрагменте.Для чего вам нужен этот вещательный приемник?Хорошим решением является упомянутое здесь

1 голос
/ 11 июня 2013

Вы можете зарегистрировать приемник вещания следующим образом: getActivity (). RegisterReceiver (...

...