Intereting Posts
Как включить горизонтальную прокрутку на вкладке, например Google Play? Exception 'open failed: EACCES (Permission denied)' на Android Android: разница между невидимыми и ушла? Кордова Не удалось зарезервировать достаточно места для кучи объектов 2097152KB Кэш для рисования Android Как добавить пользовательские свойства / значения в файл манифеста Android? Разница между sw600dp и w600dp? Как установить приложение Google Play в эмулятор Android Studio? Какое знание / экспертиза требуется для переноса андроида на пользовательское устройство ручного управления? Android-эмулятор: это приложение не будет работать без сервисов Google Play Быстрое размытие растровых изображений для Android SDK Android отключить элементы списка Разработка приложения похожа на «Google сейчас» – возможно ли использовать распознавание голоса без ввода ключа? Как написать Java.util.Map в пакет по разумному пути? Загрузка и загрузка изображений Android с помощью Base64 в JSON вызывает ошибку в памяти

Как получить onWindowFocusChanged на фрагменте?

Я использую Android Sliding Menu с помощью навигационного ящика . Я знаю, что onWindowFocusChanged работает над MainActivity. Как я могу проверить это hasFocus на Fragment?

Кто-то сказал, что я могу передать hasFocus в фрагмент, но я не знаю, как это сделать. Может ли кто-нибудь дать мне пример кода?

Я хочу запустить ↓ это на моем фрагменте

 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { //I need to do someing. method(); } } 

Solutions Collecting From Web of "Как получить onWindowFocusChanged на фрагменте?"

Вы можете создать интерфейс, и все ваши фрагменты реализуют этот интерфейс, а внутри вашего onWindowFocusChanged вы получаете текущий фрагмент и передаете вызов методу, предоставляемому интерфейсом.

Образец интерфейса для фрагментов может быть:

 public interface IOnFocusListenable { public void onWindowFocusChanged(boolean hasFocus); } 

Ваши фрагменты должны реализовать этот интерфейс:

 public class MyFragment implement 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 событие onWindowFocusChanged вы вызываете этот прослушиватель.

Этот подход очень похож на вышеизложенное с той разницей, что есть список IOnFocusListenable , и те, которые запускаются в действиях по onWindowFocusChanged

Из API 18 вы можете использовать этот код непосредственно в своем фрагменте :

 final ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); viewTreeObserver.addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() { @Override public void onWindowFocusChanged(final boolean hasFocus) { // do your stuff here } }); 

Где вы можете получить представление в onViewCreated или просто вызвать getView () повсюду.

Это лучшее решение

 view.post(new Runnable() { @Override public void run() { // do your stuff here } } );