我使用荒謬簡單的EndlessAdapter從Facebook加載分頁數據。在我的項目EndlessAdapter
包裝自定義BaseAdapter
。我也使用PullToRefreshListView
這是從library。一切都可以正常啓動,我得到下一頁加載數據,滾動到列表底部,加載和填充數據的下一頁,但是當我再次滾動到底部時,沒有任何反應。我有方法的日誌檢查和chacheInBackground()
在第一次成功的頁面加載後根本不運行。EndlessAdapter只加載一頁
我認爲這可能與「拉刷新」庫和適配器無法檢測ListView位置或某事有關,所以我擺脫了「拉刷新」,仍然有同樣的問題。
下面是相關代碼:
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
子getter和setter方法全局變量。
自從我重新創建適配器和調用setAdapter()
在onCreateView()
方法,如果我(在ListView
通過的可點擊的事情之一)更改爲不同的片段,然後再返回到該片段,它會載入另一頁數據。有任何想法嗎?謝謝。
Ahhh謝謝。我認爲,如果給定的頁面已經完成加載,你必須返回'false',而不是如果整個事情再也不需要加載更多的數據。 – Wenger 2013-02-28 04:32:49