2012-09-05 2 views
2

listviews 및 해당 어댑터에 대해 많은 질문이 있지만 올바르게 사용하고 있습니다. 그러나 이제 안드로이드 4.0.3 (ICS 및 일부 특정 레이아웃에서만)에서 (항상) 올바르게 업데이트되지 않는 listview가 있습니다.Android 4.0.3 ICS ArrayAdapter notifyDataSetChanged가 ListView를 업데이트하지 않습니다.

코드 : 활동의에서 onCreate에서

: 별도의 스레드에서

mListView = (ListView) findViewById(R.id.list); 
mArrayAdapter = new CustomListAdapter(this, R.layout.row_layout); 
// We update it manually, but leaving this default doesn't work either 
mArrayAdapter.setNotifyOnChange(false); 
mListView.setAdapter(mArrayAdapter); 

은 내가 어댑터에 삽입, 추가 교체해야 새로운 데이터를받을 수 있습니다. simplicitly 지금 명확한를 사용하여 예를 대체 전체를 사용하는 경우 : 새로운 항목들이 목록에 표시되지만 업데이트가 모든 항목없이 수신되는 경우 수신

private void updateList() { 
    runOnUiThread(new Runnable() { 
    public void run() { 
     mArrayAdapter.clear(); 
     for (CustomItem item: mLastReceivedItems) { 
     mArrayAdapter.add(item); 
     } 
     mArrayAdapter.notifyDataSetChanged(); 
    } 
    }); 
} 

. 어댑터가 실제로 비어있는 동안보기에는 항목이 계속 표시됩니다.

코드는 여전히 Android 2.3.7에서 작동하며 다른 레이아웃을 사용할 때 재현 할 수 없지만 중요한 차이점을 많이 볼 수는 없습니다.

많은 성능을 잃지 않고이 버그를 해결할 레이아웃 매개 변수 또는 어댑터 함수를 찾은 사람이 있습니까?

private void updateList() { 
    runOnUiThread(new Runnable() { 
    public void run() { 
     mArrayAdapter.clear(); 
     for (CustomItem item: mLastReceivedItems) { 
     mArrayAdapter.add(item); 
     } 
     mArrayAdapter.notifyDataSetChanged(); 
     // FIXME: Temp fix for ICS: 
     mListView.setAdapter(mListView.getAdapter()); 
    } 
    }); 
} 

I :

+0

responseRequester의 유형 및 기능은 무엇입니까? –

+0

어떤 유형의 항목 일뿐입니다. 어떤 종류의 종류가 어댑터와 목록보기에서 사용되는지는 관련이 없습니다 – Huupke

+0

관련성 여부는 묻지 않았습니다. 나는 그 타입과 기능이 무엇인지 묻고있다. 단지 데이터 컨테이너입니까? 해당 코드 표시 –

답변

1

내가리스트 뷰는 모든 'SMART'보기 다시 사용하여 제거 할 수 있도록 내가 데이터를 업데이트 목록보기에 모든 시간을 같은 어댑터를 설정하여 임시 수정으로 해결 방법을 찾았습니다 누군가가 ListView.mRecycler를 더 이상 사용하지 않기 때문에 문제가 어디에 있는지 알기를 바랍니다. 따라서 여기서는 성능이 떨어집니다.

+0

프로그래밍 방식으로 listview의 fontsize를 변경하려고 시도했을 때이 버그가 발생했습니다. listview 행은 API 15 (4.0.3)에서 크기가 조정되지 않았지만 다른 모든 버전에서는 변경되었습니다. 귀하의 솔루션은 그것을 해결했습니다! – lenooh

관련 문제