Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get the onWindowFocusChanged on Fragment?

I am using Android Sliding Menu using Navigation Drawer. I know that onWindowFocusChanged work on MainActivity. How can I check is it hasFocus on Fragment?

someone said that I can pass the hasFocus to fragment, but I dont know how to do this. Can anyone give me some sample code?

I want to run ↓ this on my fragment

@Override public void onWindowFocusChanged(boolean hasFocus) {     super.onWindowFocusChanged(hasFocus);      if (hasFocus) {         //I need to do someing.         method();     } } 
like image 641
Ben Luk Avatar asked May 08 '15 17:05

Ben Luk


1 Answers

From Android 4.3 (API 18) and up you can use this code directly in your Fragment:

Kotlin

view?.viewTreeObserver?.addOnWindowFocusChangeListener { hasFocus -> /*do your stuff here*/ } 

or define this extension in your project:

fun Fragment.addOnWindowFocusChangeListener(callback: (hasFocus: Boolean) -> Unit) =     view?.viewTreeObserver?.addOnWindowFocusChangeListener(callback) 

then simply call

addOnWindowFocusChangeListener { hasFocus -> /*do your stuff here*/ } 

anywhere in your fragment (just be careful that the root view is still not null at that time).

Note: don't forget to remove your listener when you're done (removeOnWindowFocusChangeListener() method)!


Java

getView().getViewTreeObserver().addOnWindowFocusChangeListener(hasFocus -> { /*do your stuff here*/ }); 

or without lambda:

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

Where you can get the non-null View instance in the onViewCreated() method or simply call getView() from anywhere after that.

Note: don't forget to remove your listener when you're done (removeOnWindowFocusChangeListener() method)!

like image 115
Tomas Avatar answered Oct 05 '22 22:10

Tomas