본문 바로가기

안드로이드/JAVA

[code] android recyclerview ViewTreeObserver

728x90

 

 

 

리싸이클러뷰를 처리하는데 null 오류가 뜨면서 에러가 나는 경우가 종종 있다.

아직 VIEW 가 그려지지 않았는데 리싸이클러뷰에 대한 처리를 하려다보니 생기는 오류이다.

 

이는 RecyclerView 뿐 아니라 다른 view 들도 가능하지만

꼭 이 리싸이클러뷰에서 오류가 많이 나서..^0^...........

 

 

ViewTreeObserver 의 체크시점은

 

OnDrawListener 뷰를 그릴 때

OnGlobalFocusChangeListener 전체 뷰 포커스가 변경될 때

OnGlobalLayoutListener 전체 뷰가 그려졌을 때

OnPreDrawListener 뷰가 그려지기 전에

OnScrollChangedListener 스크롤 상태 변경될 때

OnTouchModeChangeListener 터치 모드가 변경될 때

OnWindowAttachListener 뷰의 계층 구조에 붙거나 떨어질 때

OnWindowFocusChangeListener 윈도우 포커스가 변경 됐을 때

 

를 체크해서 처리할 수 있다.

 

나는 보통

 

OnGlobalLayoutListener 를 리스너에  붙인 뒤에 작업을 처리하도록 하곤 한다.

그리고 제일 중요한건!!

리스너를 호출 하고 꼭 removeOn~~~Listener() 를 호출해서

초기화시켜주어야한다.

 

 

 

JAVA

        mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                
                
                mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);


            }
        });

 

KOTLIN

        reycler_view.getViewTreeObserver(object: ViewTreeObserver.OnGlobalLayoutListener {
        	override fun onGlobalLayout(){
            
            
  	          reycler_view.viewTreeObserver.removeOnGlobalLayoutListener(this)
            }
        })

 

코틀린은 이렇게ㅎ_ㅎ

 

728x90