Вы можете просто отправить указатель функции на фрагмент из приложения или использовать для него шаблон наблюдателя.
Позволяет создать интерфейс, который вызывается, когда фрагмент становится видимым
public interface FragmentVisibilityListener{
void onVisibilityChanged(boolean visible, Fragment fragment);
}
И затем создать класс, которому этот фрагмент сообщаетя видим или скрыт.
public class FragmentVisibilityHandler{
private static FragmentVisibilityHandler instance;
private FragmentVisibilityListener visibilityListener;
public static FragmentVisibilityHandler getInstance(){
if(instance == null)
instance = new FragmentVisibilityHandler();
return instance;
}
public void setVisibilityListener(FragmentVisibilityListener listener){
visibilityListener = listener;
}
//you should use this methods in your fragments!
public void stateChanges(boolean action, Fragment fragment){
if(visibilityListener != null){
this.visibilityListener(action,fragment);
}
}
}
В вашем фрагменте звонки
public class MyFragment extends Fragment{
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
FragmentVisibilityHandler.getInstance().stateChanges(hidden, this);
}
}
И когда вы захотите прослушать изменения вашего фрагмента, вы можете просто зарегистрировать visibilityListener для него.Например, в классе вашего приложения:
public class MyApplication extends Application implements FragmentVisibilityListener{
void inSomeMethod(){
FragmentVisibilityHandler.getInstance().setVisibilityListener(this);
}
void onVisibilityChanged(boolean visible, Fragment fragment){
Log.i("MyApplication",fragment.toString()+" becomes "+ hidden ? "visible" : "invisible" );
}
}
Вы можете создать другой шаблон для регистрации этого или использовать onViewCreated
вместо onHiddenChanged
, если вы хотите прослушать создание фрагмента.