5

如何在按钮单击时关闭键盘?我有一个具有EditText和两个按钮的片段。一个提交EditText内容,另一个只关闭片段。现在当片段消失时,键盘保持不动。但是,按后退按钮关闭键盘或点击“完成”也会关闭它。但是我需要的是当片段关闭时键盘消失。关闭按钮上的键盘单击该关闭片段

我已经试过类似的问题hereherehere解决方案,但没有一个似乎工作。他们中的大多数投掷NullPointerException。所有活动都不是碎片。调用键盘的代码工作原理:

editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

但是我必须添加getActivity()才能使其工作。

任何帮助将不胜感激。

回答

7

使用此方法

public void hideKeyboard() { 
    // Check if no view has focus: 
    View view = getActivity().getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
    } 
} 
+0

感谢您的回答时。我试过你的解决方案,但它会抛出一个错误:'致命例外:主要 进程:com.esqmo.apps.mosungiplus,PID:14856 java.lang.NullPointerException:尝试调用虚拟方法'android.view.View android ():'View view = getActivity()。getCurrentFocus(); ** –

+1

Works Now:我正在调用getActivity()。onBackPressed() );在你的代码之前关闭这个片段。我刚刚倒过来了。 –

1

尝试以下方法

public static void hideKeyboard(Context mContext) { 

    try { 

     View view = ((Activity) mContext).getWindow().getCurrentFocus(); 

     if (view != null && view.getWindowToken() != null) { 

      IBinder binder = view.getWindowToken(); 

      InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(binder, 0); 

     } 

    } catch (NullPointerException e) { 

     e.printStackTrace(); 

    } 

} 

在这种方法中,你必须通过上下文参数。希望它能帮助你。

4

用于片使用下面的函数

public static void hideKeyboard(Activity activity) { 
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    //Find the currently focused view, so we can grab the correct window token from it. 
    View view = activity.getCurrentFocus(); 
    //If no view currently has focus, create a new one, just so we can grab a window token from it 
    if (view == null) { 
     view = new View(activity); 
    } 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 

调用它的按钮被点击

btn_cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      hideKeyboard(getActivity()); 
     } 
    });