2013-03-14 2 views
1

수천 개의 항목을 ListView에 표시하는 작업이 있습니다. 그래서이 항목의 데이터를 메모리에로드해야합니다. 그러나 각 항목의 데이터가 1KB보다 커서 모든 데이터를 메모리에로드하면 메모리가 소모되어 OOM 예외가 발생합니다. 사실, 처음에는 이러한 데이터의 일부만로드하고 사용자가 ListView의 맨 아래로 스크롤하면 더 많은 데이터가 ListView에 추가됩니다. 그러나 사용자가 아래로 계속 스크롤하면 모든 데이터가 마침내 메모리에로드되고 OOM이 나타납니다.ListView의 아래쪽에 새 항목을 추가하고 동시에 이전 항목을 제거하려면 어떻게합니까?

문제를 해결하기 위해 ListView의 길이에 최대 제한을 설정할 수 있다고 생각합니다. 예를 들어 최대 길이를 500으로 설정합니다. 사용자가 ListView의 아래쪽으로 계속 스크롤하면 ListView의 끝에 50 개의 새 항목을 추가하고 동시에 맨 위에 50 개의 항목을 제거하므로 최대 길이 ListView의 동일한 유지합니다. 나는 마지막에 새 항목을 추가하고 ListView의 맨 위에서 오래된 항목을 제거하는 방법을 알고 있지만이 작업을 함께 수행하려고하면 이상한 일이 발생합니다. ListView의 내용은 예상 한 것과 다릅니다.

내 문제를 해결하는 방법을 아는 사람은 누구입니까?

유용한 답변이 있으면 알려 주겠지 만 항목의 데이터 크기를 변경하지 말아주세요. 그럴 권한이 없기 때문입니다.

class MyOnScrollListener implements OnScrollListener{ 

    public void onScrollChange(View, int, int, int){ 
     if(reach the bottom){ 
      add50ItemsToTheBottomOfTheList(); 
      remove50FromTheTopOfTheList(); 
      myListViewAdapter.notifyDataSetChanged(); 
     } 
    } 

} 
+0

https://github.com/commonsguy/cwac-endless. 이 시도. – Raghunandan

+0

@Raghunandan 나는이 EndlessAdapter를 조금 알지만 사용자가 ListView의 맨 아래로 스크롤 할 때 모든 데이터를 메모리에로드할지 여부를 명확히하지 않습니까? –

+0

동일한 태깅 공유 설정 및 안드로이드에 관한 다른 질문을 게시 해보십시오. 나는 끝없는 두루마기로 너를 도울 수있는 사람들이있을 것이라고 확신한다. – Raghunandan

답변

0

내가 ListView를 상단에서 일부 항목을 제거하려고하지만,이리스트 뷰에 이상한 행동을하게됩니다 :

의사 코드는합니다 (scrollListener은 ListView에로 설정). 그래서 목록의 맨 위에있는 항목을 null로 설정하고 사용자가 뒤로 스크롤 할 때 다시 네트워크에서로드합니다.

관련 문제