Now, I try to hide the softkeyboard when user touch outside the keyboard:
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(
I faced exactly the same problem, while writing OnPageChangeListener
within an Activity. You can use one of these solutions. Either:
getWindow().getDecorView().getRootView().getWindowToken()
or:
findViewById(android.R.id.content).getWindowToken()
In kotlin:
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(window.attributes.token, 0)
Or, If you have a view:
imm.hideSoftInputFromWindow(view.windowToken, 0)
Simply use getWindow().getDecorView().getWindowToken()
Surely you can use:
getContentView().getWindowToken()
or you can refer to SO Quest
You could just get the token from the WindowManager.LayoutParams
of the window directly
getWindow().getAttributes().token
public static final String M_TOKEN = "mToken";
@Nullable
protected IBinder getToken(Activity activity) {
try {
Field mTokenField = Activity.class.getDeclaredField(M_TOKEN);
mTokenField.setAccessible(true);
IBinder mToken = (IBinder) mTokenField.get(activity);
return mToken;
} catch (NoSuchFieldException e) {
// handle
} catch (IllegalAccessException e) {
// handle
}
return null;
}