2014-11-10 3 views
2

내 앱 ListView에서 무한 스크롤을 구현하려고하지만 ListView가 추가되는 대신 새 데이터로 채워진다는 결과가 발생합니다. 내가 무엇을 노 클루 얻고있다새로운 Listview 데이터를 무한 스크롤에 추가하는 방법 ListView

는 ... ... 코드 조각이 저를 도와주세요

MainActivity.java

public class MainActivity extends FragmentActivity{ 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_near_me); 
} 
    CityListFragment cityFragment = new CityListFragment(); 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, cityFragment).commit(); 
} 

CityListFragment.java

public class CityListFragment extends Fragment { 

private List<City> city; 
private ListView listView; 
CityListAdapter adapter; 
ProgressDialog mProgressDialog; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    new MyTask().execute(); 
} 

public class MyTask extends AsyncTask<String, Void, List<City>> { 

    @Override 
    protected List<City> doInBackground(String... urls) { 
     try { 
      city = serviceProvider.getService().getCities(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return city; 
    } 

    @Override 
    protected void onPostExecute(List<City> organization) { 
     adapter = new CityListAdapter(getActivity(), city); 
     listView.setAdapter(adapter); 
     // Create an OnScrollListener 
     listView.setOnScrollListener(new AbsListView.OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(AbsListView view, 
              int scrollState) { // TODO Auto-generated method stub 
       int threshold = 1; 
       int count = listView.getCount(); 

       if (scrollState == SCROLL_STATE_IDLE) { 
        if (listView.getLastVisiblePosition() >= count 
          - threshold) { 
         // Execute LoadMoreDataTask AsyncTask 
         new LoadMoreDataTask().execute(); 
        } 
       } 
      } 
     }); 
    } 
} 

public class LoadMoreDataTask extends AsyncTask<String, Void, List<City>> { 
    @Override 
    protected List<City> doInBackground(String... urls) { 
     try { 
      // web service request 
      city = serviceProvider.getService().getNextCities(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return city; 
    } 

    @Override 
    protected void onPostExecute(List<City> organization) { 
     int position = listView.getLastVisiblePosition(); 
     adapter = new CityListAdapter(getActivity(), city); 
     listView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
     listView.setSelectionFromTop(position, 0); 
     mProgressDialog.dismiss(); 
    } 
} 

}

대신리스트 뷰 에서 이전 기록을 삭제하는 목록에 새 레코드를 추가로 나는 끝없는 목록보기 구현 이전에 추가하지 않기 때문에 이런 일이

http://www.androidbegin.com/tutorial/android-parse-com-listview-load-more-using-onscrolllistener-tutorial/

답변

3

이 특정 링크를 따라 명부.

코드 당신은 내 일을 저장 ...이

public class MyTask extends AsyncTask> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected List<City> doInBackground(String... urls) { 
      try { 
       List<City> city_new = serviceProvider.getService().getCities(); 
    if(city_new != null && city_new.size() > 0){ 
    city.addAll(city_new ) 
    } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return city; 
     } 

     @Override 
     protected void onPostExecute(List<City> organization) { 
      adapter = new CityListAdapter(getActivity(), city); 
      listView.setAdapter(adapter); 
      // Create an OnScrollListener 
      listView.setOnScrollListener(new AbsListView.OnScrollListener() { 

       @Override 
       public void onScrollStateChanged(AbsListView view, 
               int scrollState) { // TODO Auto-generated method stub 
        int threshold = 1; 
        int count = listView.getCount(); 

        if (scrollState == SCROLL_STATE_IDLE) { 
         if (listView.getLastVisiblePosition() >= count 
           - threshold) { 
          // Execute LoadMoreDataTask AsyncTask 
          new LoadMoreDataTask().execute(); 
         } 
        } 
       } 
      }); 
     } 
    } 

    public class LoadMoreDataTask extends AsyncTask<String, Void, List<City>> { 
     @Override 
     protected List<City> doInBackground(String... urls) { 
      try { 
       // web service request 
       List<City> city_new = = serviceProvider.getService().getNextCities(); 
if(city_new != null && city_new.size() > 0){ 
city.addAll(city_new ) 
} 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return city; 
     } 

     @Override 
     protected void onPostExecute(List<City> organization) { 
      int position = listView.getLastVisiblePosition(); 
      adapter = new CityListAdapter(getActivity(), city); 
      listView.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
      listView.setSelectionFromTop(position, 0); 
      mProgressDialog.dismiss(); 
     } 
    } 
    } 

enter code here

+0

이봐 고맙습니다 친구처럼 보이게한다 ... – anand

1
@Override 
     protected void onPostExecute(List<City> organization) { 
      int position = listView.getLastVisiblePosition(); 
      previousCityList.addAll(city);**//add this line** 
      adapter = new CityListAdapter(getActivity(), previousCityList); 
      listView.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
      listView.setSelectionFromTop(position, 0); 
      mProgressDialog.dismiss(); 
     } 
관련 문제