我正在使用极其简单的 EndlessAdapter 从 Facebook 加载分页数据。在我的项目中EndlessAdapter
,包装自定义BaseAdapter
. 我也在使用PullToRefreshListView
来自这个库的一个。一切都加载正常,我得到了下一页加载的数据,我滚动到列表的底部,加载并填充了下一页数据,但是当我再次滚动到底部时,什么也没有发生。我对这些方法进行了日志检查,并且chacheInBackground()
在第一次成功加载页面后根本没有运行。
我认为这可能与“拉动刷新”库和适配器无法检测到 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
)然后导航回该片段,它将加载另一页数据。有任何想法吗?谢谢。