Things take time

[Android] Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference 본문

Android(Error)

[Android] Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference

겸손할 겸 2019. 7. 9. 11:27

[에러코드]

 

Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference

getWindowToken()이 Null 값을 리턴하는 경우

 

[상황]

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (adapter.getItemCount() - 8 > layoutManager.findFirstVisibleItemPosition()) {
  moveBottom.show();
  imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} 

위와 같은 소스를 사용했을 때 발생했다.

하드웨어 키보드를 숨기는 코드에서 발생한 에러!

 

[해결방법]

imm.hideSoftInputFromWindow(현재 액티비티에 그려진 뷰.getWindowToken(), 0);

나의 경우에는 getCurrentFocus()에서 Null을 리턴했기에, windowToken값을 얻을 수 없었다.

해결방법은 현재 액티비티에서 레이아웃 파일에 그려져있는 뷰 들중(당연히 findViewById로 연결된) 하나를 선택해서 사용하면 된다.

 

나같은 경우 recycler view가 있는 뷰였어서 해당 recyclerView.getWindowToken()으로 해결했다.