2012-03-20 2 views
0

사용자가 목록의 맨 아래로 스크롤 할 때 어댑터에 항목을 추가하려고합니다. 이 작업을 수행 할 수 있지만 어댑터에 새 항목을 추가하고 이미 있던 항목을 유지하려고하지만 원래 항목이 제거되고 새 항목 만 표시됩니다. 내가 어떻게 이것을 달성 할 수 있는지에 대한 아이디어가 있습니까?android notifyDataSetChanged()는 목록의 원본 데이터를 삭제합니다.

이 내 코드는 기압 모습입니다 :

public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

     if (loading) {  
      if (totalItemCount > previousTotal) { 
       previousTotal = totalItemCount; 
       loading = false; 
       previousTotal = totalItemCount; 
       currentPage++; 
      } 
     } 
     if (!loading 
       && ((firstVisibleItem + visibleItemCount) >= totalItemCount)) { 
      if (fragmentMode == 5) { 
       ActiveUser.getInstance().FetchVidPage(currentPage, chanID, 
         activity, this); 
       loading = true; 
      } 
     } 
} 

@Override 
public void onTaskFinished() { 
    titles.addAll(ActiveUser.getInstance().getWebVidInfo(1)); 
    thumbs.addAll(ActiveUser.getInstance().getWebVidInfo(2)); 
    data.addAll(ActiveUser.getInstance().getWebVidInfo(3)); 
    describtions.addAll(ActiveUser.getInstance().getWebVidInfo(4)); 
    vidOwnerIDs.addAll(ActiveUser.getInstance().getWebVidInfo(4)); 

    notifyDataSetChanged(); 

} 

그냥 내가 뭘하는지 clearify하는; 목록의 맨 아래가 보이면 더 많은 비디오를 가져 오는 AsyncTask를 시작합니다. asynctask에서 asynctask가 끝나면 해고 된 이벤트에 대한 리스너로 어댑터를 설정했습니다.이 작동합니다.

onTaskFinished() 위의 마지막 메서드 - 여기서 각 목록 항목을 채우기 위해 어댑터가 사용하는 4 개의 목록에 새 항목을 추가하고 마지막으로 어댑터에 알립니다.

새 항목이 모두 잘 추가되었으므로 새로운 항목이 추가되기 전의 항목이 제거되었거나 더 이상 표시되지 않는 것이 문제입니다.

은 원래의 데이터와 새로 추가 된

어떤 아이디어를 모두 포함 않는 의미, 나는이 목록의 길이가 증가한다는 것을 확인했다고 추가 잊어 버렸습니까?

[편집] 난 내 자신의 질문에 대답 목록보기

 adapter = new LazyAdapter(getActivity(), ActiveUser.getInstance() 
       .getWebVidInfo(3), 
       ActiveUser.getInstance().getWebVidInfo(1), ActiveUser.getInstance() 
         .getWebVidInfo(2), 
       ActiveUser.getInstance().getWebVidInfo(5), ActiveUser.getInstance() 
         .getWebVidInfo(4), CHAN_ID, FRAGMENT_MODE); 
     listing.setAdapter(adapter); 
     listing.setOnScrollListener(adapter); 
+0

어댑터가 getCount에서 반환하는 값을 업데이트하지 않는 경우에 발생할 수 있습니다. 그럴 가능성이 있니? –

+0

@PhillipFitzsimmons getCount에서 가져 오는 값은 "titles"라는 목록의 길이이므로 문제가 있다고 생각하지 마십시오. – Line

+0

어댑터를 listview에 설정할 때의 포스트 코드 및 사용자 정의 어댑터의 서명 ... –

답변

0

에 어댑터를 설정 곳의 코드를 추가.

notifyDataSetChanged()가 수행하는 작업에 대한 이해가 부족하다는 것이 나타났습니다. 초기 생성시와 동일한 A 스트 0 터 매개 변수로 재 작성되는 어댑터를 호출합니다. 그래서 새로운 항목을 어댑터 내부 목록에 추가하는 것은 아무런 효과가 없었습니다. 대신 생성자를 통해 어댑터에 구문 분석 된 목록에 모든 항목이 포함되어 있는지 확인해야했습니다.

이전 방법으로는 어댑터의 내부 목록에 새 데이터와 이전 데이터가 포함되어 있었지만 어댑터의 totalItemCount는 업데이트되지 않았습니다.