我想知道在活动中切换片段时如何隐藏键盘屏幕。
我有一个启动片段的活动。这个片段有一个TextInputEditText视图,我可以在其中输入一些文本,当选择TextInputEditText视图时,键盘会自动显示出来。输入完文本后,单击已编程的“按钮”,将我带到另一个片段。不幸的是,键盘屏幕仍显示在这个新片段中,我希望它被隐藏/消失。
我在显示TextInputEditText视图的片段中的onCreateView(..)中的setOnClickListener按钮中尝试了以下操作。
摘要:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//send to the backend,when response come back, then insert
Fragment fragment = null;
Class fragmentClass = HashHomeFragment.class;
try {
fragment = (Fragment) fragmentClass.newInstance();
}catch (Exception e){
e.printStackTrace();
}
FragmentManager fragmentManager = getFragmentManager();
Bundle bundle = new Bundle();
bundle.putString("hash_message", "thisstorehaslotsofdiscounts");
fragment.setArguments(bundle);
fragmentManager.beginTransaction().replace(R.id.hash_container, fragment, "Home").commit();
//hide keyboard
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
});
但是当android转到片段时,键盘仍然存在-代码不起作用!
有人可以帮我弄清楚当我从一个片段移到另一个片段时,隐藏键盘的位置和代码吗? ...
答案 0 :(得分:0)
//hide keyboard
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
FragmentManager fragmentManager = getFragmentManager();
Bundle bundle = new Bundle();
bundle.putString("hash_message", "thisstorehaslotsofdiscounts");
fragment.setArguments(bundle);
fragmentManager.beginTransaction().replace(R.id.hash_container, fragment, "Home").commit();
倒车似乎可以解决问题。我忘记了当我调用最后一个fragmentManger命令时,当前的片段正在被销毁,并且当前的视图没有指向我认为的那样。 隐藏完好当前视图的键盘,然后切换片段会更有意义!
答案 1 :(得分:0)
也许您必须在隐藏键盘之前清除EditText的焦点。试试这个功能:
private void hideKeyboard(Context context) {
if (context == null || !(context instanceof Activity) || ((Activity) context).getCurrentFocus() == null) {
return;
}
View view = ((Activity) context).getCurrentFocus();
if (view != null) {
view.clearFocus();
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputManager != null) {
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
答案 2 :(得分:0)
import android.view.inputmethod.InputMethodManager;
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
我将所有按钮的onClick(View v)事件之后放在此位置。
单击按钮时键盘将隐藏。 希望这对您有帮助...
答案 3 :(得分:0)
public void hideKeyboard() {
View view = getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) getContext().
getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}