0
我需要你的帮助,与我目前的项目。要求是让listview分页,并在向下滚动时加载其他数据,就像Facebook和Twitter应用一样。Android listview无限滚动使用Retrofit
这是我到目前为止已经试过:
MainActivity
listView.setOnScrollListener(new InfiniteScrollListener() {
public boolean onLoadMore(int page, int totalItemsCount) {
// Triggered only when new data needs to be appended to the list
// Add whatever code is needed to append new items to your AdapterView
customLoadMoreDataFromApi(page);
// or customLoadMoreDataFromApi(totalItemsCount);
return true; // ONLY if more data is actually being loaded; false otherwise.
}
});
private void getData() {
if(ConnectionDetector.hasNetworkConnection(getActivity())) {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(HOME_DOMAIN)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
WebServices service = restAdapter.create(WebServices.class);
service.getRecords(
"1", // Row
"10", // Count
new Callback<World>() {
@Override
public void success(Som som, Response response) {
dataList = Parser.getResponseBody(response);
adapter = new SomAdapter(getActivity(), dataList);
listView.setAdapter(adapter);
}
@Override
public void failure(RetrofitError retrofitError) {
Log.e(TAG, "" + retrofitError.toString());
}
});
} else {
Toast.makeText(getActivity(),
getActivity().getResources().getString(R.string.connection_error),
Toast.LENGTH_SHORT).show();
}
}
// Append more data into the adapter
public void customLoadMoreDataFromApi(int offset) {
// This method probably sends out a network request and appends new data items to your adapter.
// Use the offset value and add it as a parameter to your API request to retrieve paginated data.
// Deserialize API response and then construct new objects to append to the adapter
getData();
moreProgress.setVisibility(View.VISIBLE);
Log.e(TAG, "MORE PROGRESS");
}
InfiniteScrollListener:
public abstract class InfiniteScrollListener implements AbsListView.OnScrollListener {
private int bufferItemCount = 10;
private int currentPage = 0;
private int itemCount = 0;
private boolean isLoading = true;
public InfiniteScrollListener(int bufferItemCount) {
this.bufferItemCount = bufferItemCount;
}
public abstract void loadMore(int page, int totalItemsCount);
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// Do Nothing
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
if (totalItemCount < itemCount) {
this.itemCount = totalItemCount;
if (totalItemCount == 0) {
this.isLoading = true; }
}
if (isLoading && (totalItemCount > itemCount)) {
isLoading = false;
itemCount = totalItemCount;
currentPage++;
}
if (!isLoading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + bufferItemCount)) {
loadMore(currentPage + 1, totalItemCount);
isLoading = true;
}
}
}
这显示是滚动时的进度条。这工作,但我也需要附加到列表视图下一个获取的数据。我该怎么做?我需要你的建议,因为这是我第一次在Android中进行分页。谢谢!
我有一个自定义适配器。我需要使分页增加10.你可以给样品addAll方法吗?谢谢! –
您必须在dataList和notifyDataSetChanges()中添加数据; dataList.add(结果数据); adapter.notifyDataSetChanged(); –
@aelimill我的意思是自定义适配器的方法? –