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()); 
     } 
    });