Cannot call this method while RecyclerView is computing a layout or scrolling
위 에러는 RecyclerView 에서 notify 관련 함수(notifyDataSetChanged, notifyItemChanged 등등)을 사용할 때 자주 발생 한다.
무슨 에러 일까....
RecyclerView 가 레이아웃을 계산 하고 있거나 스크로링 하는 동안 에는 사용 할 수 없다!
라는 문구이다.
그래서 난 UI 쓰레드(runOnUiThread) 를 사용 하면 되나 했더니.. 그것도 안되고 에러를 품어 낸다.
결국 구글링을 열심히 해봤다. 대답은 대부분이 Handler를 만들어 post로 던져라 이다.
참고 : http://stackoverflow.com/a/32644466/3534559
https://plus.google.com/+KayUweJanssen/posts/ApUBL2Qfbcf
즉, 완전 내가 잘못 생각 한것이었다. RecyclerView 계산과 스크롤링은 UI 스레드에서 하고 있었나 보다.
그래서 UI 쓰레드가 아닌 별도의 Runnable을 돌려 MessageQueue에 저장 하게 한 후,
RecyclerView에 연관성을 없게 하는 것이다.
(이건 제가 테스트 한 후, 생각한 결론 입니다. 다른 의견있으신 분은 언제든지 댓글 달아주세요.)
그럼 기다리시던 해결책! 아래와 같이 하세요.
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
};
handler.post(r);
handler 하나를 만드 신 후, post 함수로 호출 하게 하시면 됩니다.
참고하세요.
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] Tmp detached view should be removed from RecyclerView before it can be recycled (0) | 2016.09.05 |
---|---|
[Android] 메소드 수 확인 방법 (1) | 2016.08.30 |
[Andorid][DataBinding] 매개 변수 2개를 이용 하기 (0) | 2016.08.16 |
[Android][ISO 4217] 통화 형태 문자열 만들기 (0) | 2016.08.16 |
[Android][DataBinding] application namespace for attribute will be ignored (0) | 2016.08.09 |