Было довольно больно иметь дело с прокруткой, определять, когда она закончена, и она действительно находится внизу списка (не внизу видимого экрана), и запускает мой сервис только один раз, чтобы получить данные из Интернета. Однако сейчас он работает нормально. Кодекс следующий для пользы любого, кто сталкивается с такой же ситуацией.
ПРИМЕЧАНИЕ. Мне пришлось переместить код, связанный с моим адаптером, в onViewCreated вместо onCreate и обнаружить прокрутку в основном так:
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (getListView().getLastVisiblePosition() == (adapter.getCount() - 1))
if (RideListSimpleCursorAdapter.REACHED_THE_END) {
Log.v(TAG, "Loading more data");
RideListSimpleCursorAdapter.REACHED_THE_END = false;
Intent intent = new Intent(getActivity().getApplicationContext(), FindRideService.class);
getActivity().getApplicationContext().startService(intent);
}
}
Здесь RideListSimpleCursorAdapter.REACHED_THE_END - это дополнительная переменная в моем SimpleCustomAdapter, которая установлена следующим образом:
if (position == getCount() - 1) {
REACHED_THE_END = true;
} else {
REACHED_THE_END = false;
}
Только когда оба эти условия выполняются, это означает, что я действительно внизу списка и что моя служба будет работать только один раз. Если я не улавливаю REACHED_THE_END, даже прокрутка в обратном направлении снова запускает службу, пока отображается последний элемент.