본문 바로가기
Android

List View - UI thread 에러

by Leo 리오 2011. 4. 21.

(custom) ListView를 사용할 때



ArrayList<x> list;
Adapter ad;

list.add(xx);


처럼 동적으로 추가하면

ERROR/AndroidRuntime(28265): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131034121, class android.widget.ListView) with Adapter(class Leo.myCoupon.CouponAdapter)]

이런 에러가 났다..


몇시간동안 찾고

UI thread에서 돌아가게 할려고 handler도 써보고 RunOnUiThread도 해보고 했는데도

똑같은 계속에러가;

그러다 디버거를 돌려보니까 Thread1에서 돌았다. 결국, 다 UI Thread에서 돌고있었던거다;

UI Thread문제가 아니었다.


ArrayList<x> list;
Adapter ad;

ad.add(xx);


이런식으로 추가 했어야한다.... 너무 초보적인 실수라;

아니면

list.add(xx);  후에
ad.notifyDataSetChanged(); 로 알려줘도된다.

아마 list에 직접 추가되는것은 UI에 적용이 안됬던것이라 에러가 났었나보다

adapter를 통해 추가 시켜주면

자동으로 list에 추가도 해주고 UI도 업데이트 시켜주는듯 하다.

댓글5

  • 지나가던 하이애나.. 2011.07.19 13:42

    감사합니다.
    저랑 똑같은 문제를 가지고 계셨다는 것이
    너무 반갑습니다..^^

    저도 님과 같은 구조로 arrayadapter를 사용하였는데
    UIThread에서 view가 업뎃을 하는데도 계속 동일한 증상이 나타났던지라

    계속된 구글링 끝에 이런 가뭄속 단비를 만나게 되었습니다.
    정말 감사합니다.
    올해 복권당첨되십시오..^^
    답글

  • 난 정말 몰라요 2013.11.30 16:00

    안녕하세요
    지금 동일한 문제로 고민을 하는데..
    adapter에 add라는 함수가 있나요??
    답글

  • JinBok 2013.12.09 11:48

    와우 감사합니다.
    헤메고 있었는데 이걸로 해결했네요
    답글

  • 2020년에도 이 글을 봐야하네요..ㅠ
    많은 블로거들이 위 처럼 adapter를 안통하고 list에 바로 add를 하는 예제를 보여주네요.

    답글