Как получить 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 } } );