2011-08-29 4 views
0

나는 많은 사용자 정의보기와 사용자 정의 ListAdapter가 포함 된 꽤 멋진 MergeAdapter를 가지고 있습니다. 이 MergeAdapter는 x 초마다 업데이트되는 컨텐츠를 표시하는 ListActivity를 구동합니다.MergeAdapter의 내용 업데이트

현재 새 MergeAdapter를 만들고, 내 모든 사용자 정의보기를 만들고 추가합니다 (여기에는 몇 개의 ImageView가 포함되어 있습니다). - 내 활동의 ListView에서 setAdapter를 호출하십시오.

업데이트 약 10 분 후에 힙 공간이 부족하여 충돌이 발생합니다. 궁극적으로

새로운 이미지 뷰가 추가되어 있기 때문에, 다음과 같은 예외가 발생합니다 :

Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

을 (ArrayAdapter와 같은) 간단한 어댑터, 난 그냥 데이터 세트를 업데이트하고, 부를 것이다으로

notifyDataSetChanged() 
어댑터의

.

MergeAdapter를 "업데이트"하는 비슷한/권장 방법이 있습니까? 아니면 잠재적으로 복잡한 MergeAdapter의 내용을보고 개별 뷰를 업데이트해야합니까?

답변

0

MergeAdapter를 "업데이트"하는 비슷한/권장 방법이 있습니까?

notifyDataSetChanged() 작품, AFAIK. 현재 MergeAdapter에는 변경 내역이 MergeAdapter에 등록 된 모든 항목으로 변경 내용을 ListAdapters에서 리플하는 코드가 있습니다. 이것은 아마도 충분히 테스트되지 않았으므로 다른 방법을 보여주는 샘플 앱이 있다면 링크를 게시하거나 나에게 보냅니다 (이 질문을 언급하십시오).

+0

내 단일 목록보기에 사용자 지정 커서 어댑터를 사용하고 있습니다. 두 커서 어댑터를 하나의 단일 목록보기로 병합하려고합니다. 서버에서 결과를 얻은 후에 listview를 새로 고치고 싶습니다. 그러나 mergeAdapter가 새로 고쳐지지 않습니다. . –

+0

FeedQuestionCursor ctx.getContentResolver =() 쿼리 ( \t \t \t \t \t FeedQuestionProvider.FEED_QUESTION_URI, 널, 널, 널, \t \t \t \t \t NULL); \t \t \t QuestionAdapter.changeCursor (FeedQuestionCursor); \t \t \t QuestionAdapter = 새로운 FeedQuestionCursorAdapter (getActivity() \t \t \t \t \t FeedQuestionCursor); \t \t \t lv_earn_question.invalidate(); \t \t \t // QuestionAdapter.notifyDataSetChanged(); \t \t \t ((BaseAdapter) QuestionAdapter) .notifyDataSetChanged(); –

+0

@CommonsWare : 다른보기 및 SimpleCursorAdapters를 병합하려면 MergeAdapter를 사용합니다. 당신이 말했듯이 notifyDataSetChanged는 모든 ListAdapter를 업데이트합니다. 그러나보기를 업데이트하는 해결 방법이 있습니까? 도와주세요. –