Facebook からページングされたデータをロードするために、とてつもなく単純な EndlessAdapter を使用しています。私のプロジェクトではEndlessAdapter
、カスタムをラップしますBaseAdapter
。PullToRefreshListView
このライブラリの a も使用しています。すべてが正常にロードされて起動し、次のページのロード用のデータを取得し、リストの一番下までスクロールすると、データの次のページがロードされて入力されますが、もう一度一番下までスクロールしても何も起こりません。メソッドのログ チェックがあり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()
メソッドを呼び出すので、別のフラグメントに ( のクリック可能なものの 1 つを介してListView
) 変更し、このフラグメントに戻ると、別のページのデータが読み込まれます。何か案は?ありがとう。