2011-03-07 7 views
0

목록보기가 4 개이고 listview를 사용했습니다. 내부 이벤트를 수신 할 때 문자열을 동적으로 변경하려고합니다. 이벤트를 수신하면 문자열을 올바르게 설정하고 호출하는 것을 볼 수 있습니다.notifyDataSetChanged()가 목록보기를 업데이트하지 않습니다.

mAdapter.notifyDataSetInvalidated(); 
mAdapter.notifyDataSetChanged(); 

그러나 목록이 업데이트되지 않습니다.

+1

같은 소스 코드를 더 제공하십시오. – Reno

답변

2

나는 동일한 경험을했습니다. 원인은 목록 어댑터가 UI 스레드가 아닌 잘못된 스레드에서 업데이트되고 있기 때문입니다. 이것은 쉽게 (필자는 다른 글에서 발견)를 통해 UI 스레드에서 어댑터 데이터를 변경하여 해결 :

runOnUiThread(new Runnable() { 
    public void run() { 
     // code that changes the list adapter data 
    } 
}); 

물론 당신은 항상 목록이 제공된다 Runnable를 구현하는 (내부) 클래스를 만들 수 있습니다 어댑터 및 데이터 추가, 삽입 등.

참고 : notifyDataSetInvalidated() 또는 notifyDataSetChanged() 호출은 setNotifyOnChange (false)를 사용하여 명시 적으로 해제하지 않는 한 기본적으로 호출되므로 필요하지 않습니다.

0

notifyDataSetChanged는 어댑터에서 추가 (또는 삽입), 제거 또는 지우기 기능을 사용하는 경우에만 작동한다고 생각합니다. 목록 어댑터를 강제로 재 작성하여 listView를 새로 고칠 수 있습니다.

실례의 나쁜 영국의

관련 문제