2017-05-28 94 views
-3

我想隐藏键盘片段android.Because一旦显示它仍然可见在所有fragments.I试试这个方法如何隐藏碎片中的软键盘?

public static void hideKeyboard(Context ctx) { 
    InputMethodManager inputManager = (InputMethodManager) ctx 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 

    // check if no view has focus: 
    View v = ((Activity) ctx).getCurrentFocus(); 
    if (v == null) 
     return; 

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 

和呼叫按钮这种方法点击

signIn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       hideKeyboard(ctx); 
       login(); 


     } 
    }); 

但这给出错误“java.lang.NullPointerException:试图调用虚拟方法'java.lang.Object android.content.Context.getSystemService(java.lang.String)'null对象引用”

+0

你为什么试图找到一些视图?将v作为参数传递给你的hideKeyboard方法,v.getContext()会给你正确的上下文,并且这将是具有两行代码的方法 –

+0

你是否已经使用Context对象初始化或分配了'ctx'? –

+0

@ViktorYakunin请用代码详细说明您的答案... –

回答

1

尝试这一个

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

调用这个刚刚通过下面的代码从您的按钮的onclick

signIn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       hideSoftKeyboard(getActivity()); 
       login(); 


     } 
    }); 
+0

谢谢它正在工作 –

+0

欢迎永远在这里 –

+0

你删除标志,为什么?这不好吗? –

-1

试试这个:

View view = this.getCurrentFocus(); 
if (view != null) { 
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 
1
signIn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     hideKeyboard(v); 
     login(); 
    } 
}); 

而在隐藏键盘方法一些实用程序类

public static void hideKeyboard(@NonNull View v) { 
    InputMethodManager inputManager = (InputMethodManager) v.getContext() 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
+0

谢谢它正在工作 –