Web サービスから最初の 25 の結果を取得し、リストの一番下に移動すると、合計結果に達するまで次の 25 などをロードするアプリケーションにエンドレス リストを実装しようとしています。しかし、私がリストの一番下に達したとき、エンドレス リスト アダプターはどのように認識しているのでしょうか。私は cwac から DemoAdapter と EndlessAdapterDemo の例を見ましたが、それを理解することはできません..またはそれは私のアクティビティが ListActivity ではないことに関係していますか? 最初の 25 個の結果がリストにロードされますが、その後、次の 25 個を呼び出すように呼び出しパラメータを変更する必要があります しかし、いつ、どのようにしてエンドレスアダプターが登場するのでしょうか? アダプターの私の実装は次のとおりです。
public class SearchResultEndlessAdapter extends EndlessAdapter {
private static final String TAG = SearchResultEndlessAdapter.class.getSimpleName();
private RotateAnimation rotate = null;
private LayoutInflater inflater;
private View pendingView = null;
private List<KeywordSearchResults> newKsearchResultList;
private int limit = 0;
public SearchResultEndlessAdapter(SearchResultListAdapter adapter, Context ctx) {
super(adapter);
this.inflater = LayoutInflater.from(ctx);
rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(600);
rotate.setRepeatMode(Animation.RESTART);
rotate.setRepeatCount(Animation.INFINITE);
}
/**
* Set the new list that is loaded from the webservice
*
* @param newKsearchResultList
* List<KeywordSearchResults>
*/
public void setNewData(List<KeywordSearchResults> newKsearchResultList) {
this.newKsearchResultList = new ArrayList<KeywordSearchResults>(newKsearchResultList);
}
/**
* The value of total results
*
* @param limit
* int
*/
public void setLimit(int limit) {
this.limit = limit;
}
@Override
protected void appendCachedData() {
LogService.log(TAG, "appendCachedData");
if (getWrappedAdapter().getCount() < limit) {
SearchResultListAdapter srListAdapter = (SearchResultListAdapter) getWrappedAdapter();
for (KeywordSearchResults kws : newKsearchResultList) {
srListAdapter.add(kws);
}
}
}
@Override
protected boolean cacheInBackground() throws Exception {
LogService.log(TAG, "cacheInBackground");
return (getWrappedAdapter().getCount() < limit);
}
@Override
protected View getPendingView(ViewGroup parent) {
LogService.log(TAG, "getPendingView");
View row = inflater.inflate(R.layout.row, null);
pendingView = row.findViewById(android.R.id.text1);
pendingView.setVisibility(View.GONE);
pendingView = row.findViewById(R.id.throbber);
pendingView.setVisibility(View.VISIBLE);
pendingView.startAnimation(rotate);
startProgressAnimation();
return (row);
}
public void startProgressAnimation() {
if (pendingView != null) {
pendingView.startAnimation(rotate);
}
}
}
そして、ActionBarActivity を拡張する myActivity の一部:
//in oncreate
searchResultEndlessAdapter = new SearchResultEndlessAdapter(searchResultadapter,this);
searchResultEndlessAdapter.setRunInBackground(false);
mListView.setAdapter(searchResultEndlessAdapter);
mListView.setOnItemClickListener(this);
mListView.setOnScrollListener(this);
//callbacks of scroll
@Override
public void onScroll(AbsListView view, int firstVisible, int visibleCount, int totalCount) {
//something needs to be done here with endlessAdapter ?
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
}