Я использую абсурдно простой EndlessAdapter для загрузки выгружаемых данных из Facebook. В моем проекте EndlessAdapter
, чтобы обернуть обычай BaseAdapter
. Я также использую PullToRefreshListView
, который из этого library. Все загружается нормально для запуска, я получаю данные для загрузки следующей страницы, я прокручиваю нижнюю часть списка, следующую страницу данных загружает и заполняет, но когда я снова прокручиваю нижнюю часть, ничего не происходит. У меня есть проверки журналов для методов, и chacheInBackground()
не запускается вообще после первой успешной загрузки страницы.EndlessAdapter загружает только одну страницу
Я думал, что это может быть связано с библиотекой «pull to refresh», и адаптер не может обнаружить позицию ListView или что-то в этом роде, поэтому я избавился от «pull to refresh» и все еще имел ту же проблему ,
Вот соответствующий код:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.news_feed, container, false);
if(appState.getNewsFeed()==null){
refreshListener.onRefresh(refreshFeedList);
Log.i("NewsFeed", "executing Request");
if(appState.lastFeed().contains("lastFeed") && feedAdapter == null){
try {
String lastFeedString = appState.lastFeed().getString("lastFeed", "null");
JSONObject lastFeedObject = new JSONObject(lastFeedString);
JSONArray lastFeedArray;
lastFeedArray = lastFeedObject.getJSONArray("data");
appState.setNewsFeed(lastFeedArray);
} catch (JSONException e) {
e.printStackTrace();
}
updateFeed();
}
}
else{
Log.i("NewsFeed", "recreating adapters from existing data");
updateFeed();
}
return view;
}
public void updateFeed(){
refreshFeedList = (PullToRefreshListView) view.findViewById(R.id.feedList);
feedList = refreshFeedList.getRefreshableView();
feedList.setDividerHeight(0);
feedAdapter = new FeedAdapter(getActivity(), appState.getNewsFeed());
endlessAdapter = new EndlessFeed(feedAdapter);
refreshFeedList.setAdapter(endlessAdapter);
refreshFeedList.setOnRefreshListener(refreshListener);
refreshFeedList.setOnItemClickListener(itemClickListener);
}
public class EndlessFeed extends EndlessAdapter {
@Override
protected View getPendingView(ViewGroup parent) {
Log.i("NewsFeed", "running getPendingView()");
View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.loading_view, null);
return (row);
}
public EndlessFeed(BaseAdapter wrapped) {
super(wrapped);
}
@Override
protected boolean cacheInBackground() throws Exception {
Log.i("NewsFeed", "running cacheInBackground()");
nextPageRequest.setCallback(nextPageCallback);
nextPageRequest.executeAndWait();
return false;
}
@Override
protected void appendCachedData() {
try {
appState.addToNewsFeed(requestResponse);
} catch (JSONException e) {
e.printStackTrace();
}
// onDataReady();
}
}
JSONArray посланный в адаптер сохраняется в глобальной переменной с получения и установки методов в Application
подкласса.
Поскольку я воссоздаю адаптеры и вызвать setAdapter()
в методе onCreateView()
, если перейти к другому фрагменту (с помощью одного из интерактивных вещей в ListView
), а затем вернуться обратно к этому фрагменту, он будет загрузить другую страницу данные. Есть идеи? Благодарю.
Ahhh thanks. Я воспринял это утверждение как означающее, что вы должны вернуть 'false', если эта страница будет загружена, а не если все это не будет загружено больше. – Wenger