2017-05-28 98 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

謝謝它正在工作 –