2012-06-14 5 views
1

모든 데이터를 처음으로로드 할 때 200 개가 넘는 데이터를 표시해야하는 사용자 정의 listview (두 개의 이미지와 5 개의 텍스트보기가 있음)가 있습니다. 메모리 예외, 같은 문제를 해결하려면 우리는 목록보기의 마지막 항목까지 목록보기를 아래로 스크롤 할 때 다음 응용 프로그램을 다시 동일한 목록에 데이터를 추가합니다. 목록보기에서 모든 데이터를 가져올 때까지 동일한 방식으로 실행됩니다. EndlessAdapter는 매 10 초마다 항상 항목을 다운로드하기 때문에 EndlessAdapter를 사용하라고 말하지 마십시오. 어느 정도 시간이 지나면 메모리 부족도 반환됩니다.우리가 스크롤했을 때 ListView에 더 많은 항목을 추가합니다.

미리 감사드립니다.

+0

"EndlessAdapter는 매 10 초마다 항상 항목을 다운로드하기 때문에 EndlessAdapter를 사용하지 말아주십시오."- 아닙니다. ** 귀하의 코드 **는 "매 10 초마다 항상 항목을 다운로드합니다"입니다. 'EndlessAdapter'에는 "anything each *"(10 초마다) 코드가 없습니다. 나는 당신의 문제가 일반적으로 당신의 마지막 질문에 대한 나의 대답에 어디에 위치하는지 설명했다 : http://stackoverflow.com/a/11023432/115145 – CommonsWare

+0

Ok 나는 동의하지만, 코드의 문제점은 어디에 있는가? 어떻게 해결 될 것인가? –

+0

나는 이미 내 대답 (http://stackoverflow.com/a/11023432/115145)에 다른 질문 (http://stackoverflow.com/questions/11022562/endless-adapter-always-running-to)에 답변했다. -download-data-in-background). – CommonsWare

답변

0

을보십시오 호출 할 수있는 방법 (5)이이 없다 imageViews와 5 textViews는 메모리 부족을 초래합니다. 아마도 일종의 캐싱 (예 : softreference 및 LruCache)을 사용하는 대신 200 개의 이미지를 모두 함께 저장하는 것입니다. 어댑터의 전체적인 점은 최소한의 메모리를 사용하여 (물론 동시에는 아니지만) 수많은 항목을 표시하는 것입니다. 당신은 (난 아직 안드로이드 시장을 전화처럼) 심지어 Play 스토어를 볼 수있는 응용 프로그램은 사용자가 스크롤 충분히 재생할 경우 메모리 캐시 ... 목록보기에 대한 자세한 내용은

, 시계를 사용 this

당신은 또한 수도 이미지 처리에 대한 자세한 내용은 here을 참조하십시오. 어쨌든 getView를 트리거 (getCount() 값과 비교 한 position 매개 변수 사용)에서 더 많은 항목을로드 한 다음 notifyDatasetChanged (getCount() 값 업데이트)를 사용하여 어댑터를 업데이트 할 때까지 취할 수 있습니다.

0

사용자가 스크롤 할 때마다 ListView의 첫 번째 요소 위치를 확인하는 것이 좋습니다. 당신이 목록의 맨 아래에 항목을 추가하고 목록의 상단에서 사람을 제거 할 수 있습니다 목록에있는 요소의 양에 가까이하면

ListView.getFirstVisiblePosition() 

.

0

사용자가 ExpandableListView를 한 번 스크롤하면 더 많은 요소가로드됩니다.

myListView.setOnScrollListener(new OnScrollListener() 
      { 
       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
       { 
        int lastVisibleElement = firstVisibleItem + visibleItemCount; 
        if(lastVisibleElement == totalItemCount) 
        { 
         //Load elements 
         myListAdapter.notifyDataSetChanged(); 
        } 
       } 
관련 문제