2015-05-07 77 views
0

我有一些帶有EditTexts的碎片。當我在第一個片段的EditText中寫入文本時,我打開下一個片段。我怎樣才能隱藏鍵盤?android隱藏鍵盤方法(焦點丟失時出錯)

我這樣做:

public static void hideSoftKeyboard(Activity activity) { 
     InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
    } 

,但如果我在第一個片段,然後再次打開下一個片段 - 焦點返回輸。我有錯誤。

我發現

EditText myEditText = (EditText) findViewById(R.id.myEditText); 
InputMethodManager imm = (InputMethodManager)getSystemService(
     Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

但我對片段和許多片段,領域衆多領域。我不想重複的代碼。

我的錯誤是:

java.lang.NullPointerException 
      at com.skip.client.customer.utils.Utils.hideSoftKeyboard(Utils.java:13) 
      at com.skip.client.customer.fragments.auth_fragments.SignUpChooseTypeAuthFragment$EventHandler.onValidationSucceeded(SignUpChooseTypeAuthFragment.java:102) 
      at com.mobsandgeeks.saripaar.Validator.triggerValidationListenerCallback(Validator.java:673) 
      at com.mobsandgeeks.saripaar.Validator.validateFieldsWithCallbackTill(Validator.java:651) 
      at com.mobsandgeeks.saripaar.Validator.validateUnorderedFieldsWithCallbackTill(Validator.java:633) 
      at com.mobsandgeeks.saripaar.Validator.validate(Validator.java:313) 
      at com.mobsandgeeks.saripaar.Validator.validate(Validator.java:274) 
      at com.skip.client.customer.fragments.auth_fragments.SignUpChooseTypeAuthFragment$EventHandler.onClick(SignUpChooseTypeAuthFragment.java:89) 
      at android.view.View.performClick(View.java:4637) 
      at android.view.View$PerformClick.run(View.java:19422) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5586) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

選中此http://stackoverflow.com/a/7696791/3036759 –

回答

1

你可以通過一個ViewhideSoftKeyboard方法,並得到從ViewgetContext()的上下文。

public static void hideSoftKeyboard(View view) { 
    InputMethodManager inputMethodManager = 
     (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } 

需要說傳遞一個Activity周圍可能是一個壞主意,因爲這可能需要memory leaks這是難於調試和修復。

0

嘗試

public static void hideSoftKeyboard(Activity activity, View view) { 
      if(activity!= null && !activity.isFinish() && view != null) 
      { 
      InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); 
      } 
    } 
0

使用此代碼

private void hideSoftKeyBoard(ScrollView view){ 
    InputMethodManager inputManager = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
} 

這是爲我工作。

0

嘗試以下的工作對我來說

public static void hideSoftKeyboard(Activity activity) { 
    if (null != activity.getWindow()){ 
    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    } 
} 
0
public static void hideKeyboard(Activity activity) { 
    // Check if no view has focus: 
    View view = activity.getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
    } 
}