как получить onWindowFocusChanged на фрагменте?
Я использую Android раздвижное меню с помощью навигационного ящика.
Я знаю это onWindowFocusChanged
работа над MainActivity.
Как я могу проверить, это hasFocus на фрагменте?
кто-то сказал, что я могу пройти hasFocus
фрагмент, но я не знаю как это сделать. Кто-нибудь может дать мне образец кода?
Я хочу запустить ↓ это на моем фрагменте
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
//I need to do someing.
method();
}
}
2 ответов
вы можете либо создать интерфейс, и все ваши фрагменты реализуют этот интерфейс, и внутри вашего 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
метод
С API 18 вы можете использовать этот код прямо в вашем фрагменте:
view.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {
@Override
public void onWindowFocusChanged(final boolean hasFocus) {
// do your stuff here
}
});
или проще с лямбда:
view.getViewTreeObserver().addOnWindowFocusChangeListener(hasFocus -> { /*do your stuff here*/ });
где вы можете получить представление в onViewCreated или просто позвонить getView адаптера() отовсюду.