Ответ 1
Вы можете создать интерфейс, и все ваши фрагменты реализуют этот интерфейс, а внутри вашего onWindowFocusChanged
вы получите текущий фрагмент и передаете вызов методу, предоставленному интерфейсом.
Образец интерфейса для фрагментов может быть:
public interface IOnFocusListenable {
public void onWindowFocusChanged(boolean hasFocus);
}
Ваши фрагменты должны реализовать этот интерфейс:
public class MyFragment implements IOnFocusListenable {
....
public void onWindowFocusChanged(boolean hasFocus) {
...
}
}
И в onWindowFocusChanged
вашей деятельности вы можете сделать
следующее:
public class MyActivity extends AppCompatActivity {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(currentFragment instanceof IOnFocusListenable) {
((IOnFocusListenable) currentFragment).onWindowFocusChanged(hasFocus);
}
}
}
Или вы создаете слушателя, а активный фрагмент добавляется к слушателю. Поэтому, если фрагмент становится видимым, вы подписываетесь на этот прослушиватель, и каждый раз, когда вызывается событие onWindowFocusChanged
, вы вызываете этот прослушиватель.
Этот подход очень похож на приведенный выше с той разницей, что существует список IOnFocusListenable
, и они запускаются в методах onWindowFocusChanged