我正在使用支持库处理 fragment 和 fragment 中的嵌套 fragment 。
我有一个场景,我从现有 fragment 中添加一个新 fragment (其中包含一个 EditText)。当用户点击 EditText 时,会显示一个虚拟键盘。但是,当键盘打开时,用户可以按下 ActionBar 中的主页按钮,这会从堆栈中删除 fragment ,但键盘仍保持打开状态。我无法强制关闭键盘,我尝试了所有代码 fragment 。鉴于所描述的情况,任何人都可以指导我如何解决这个问题吗?
编辑:我做了一个回调函数,我从 onDestroy fragment 中调用它。托管所有 fragment 的 MainActivity 实现此回调:
@Override
public void onHideSoftKeyboard(EditText editText) {
// HIDE SOFT KEYBOARD HERE
final InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
Toast.makeText(this,"KEYBOARD HIDDEN",Toast.LENGTH_LONG).show();
}
我收到 Toast 消息, fragment 在后退按钮(ActionBar 后退按钮)上被销毁,只有键盘仍然存在。
@Override
public void onDestroy() {
hideSoftKeyboard.onHideSoftKeyboard(editTextComment);
super.onDestroy();
}
最佳答案
尝试用这个强制键盘:
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
你也可以点赞:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
如果你想在用户点击 Up Home Button 时隐藏,在你的 onOptionsItemSelected 方法中尝试这样:
case android.R.id.home:
// count the active fragment
if(getSupportFragmentManager().getStackBackEntryCount() > 0) {
// hide soft method as above
InputMethodManager mImm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
mImm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
// do the pop backstack
getSupportFragmentManager().popBackStack();
} else {
// some stuff like finish the activity
}
return true;
// other items...
当您使用(覆盖)onBackPressed 方法时,您可以对后退按钮执行相同的操作。
关于android - 我无法在 Android 上隐藏虚拟键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745986/