android hide键盘方法(焦点丢失时出错)

时间:2015-05-07 08:19:17

标签: android android-edittext android-keypad

我有一些带有EditTexts的片段。当我在第一个片段的EditText中写文本时,我打开下一个片段。如何隐藏键盘?

我这样做:

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)

5 个答案:

答案 0 :(得分:1)

您可以将java.lang.NumberFormatException: For input string: "\Users\you\Documents\NetBeansProjects\Tester2\dist" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at com.sun.deploy.security.DeployManifestChecker.verifyCodebaseEx(Unknown Source) at com.sun.deploy.security.DeployManifestChecker.verifyCodebase(Unknown Source) at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source) at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source) at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source) at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source) at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source) at com.sun.javaws.Launcher.prepareResources(Unknown Source) at com.sun.javaws.Launcher.prepareAllResources(Unknown Source) at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) at com.sun.javaws.Launcher.launch(Unknown Source) at com.sun.javaws.Main.launchApp(Unknown Source) at com.sun.javaws.Main.continueInSecureThread(Unknown Source) at com.sun.javaws.Main.access$000(Unknown Source) at com.sun.javaws.Main$1.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 传递给View方法,并从hideSoftKeyboard getContext()获取上下文。

View

需要说传递public static void hideSoftKeyboard(View view) { InputMethodManager inputMethodManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } 可能是一个坏主意,因为这可能需要memory leaks,这很难调试和修复。

答案 1 :(得分: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);
          }
    }

答案 2 :(得分:0)

使用此代码

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

这对我有用。

答案 3 :(得分:0)

尝试以下为我工作

public static void hideSoftKeyboard(Activity activity) {
    if (null != activity.getWindow()){
    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
  }
}

答案 4 :(得分: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);
    }
}