我正在使用StaggeredGridView
实现RecyclerView
适配器。如何使用Spinner
在RecyclerView中附加从服务器获取的下一个项目。我正在使用以下内容,但并不是说它会覆盖以前的数据。
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
visibleItemCount = mStaggeredGridLayoutManager.getChildCount();
totalItemCount = mStaggeredGridLayoutManager.getItemCount();
int[] firstVisibleItems = null;
firstVisibleItems = mStaggeredGridLayoutManager.findFirstVisibleItemPositions(firstVisibleItems);
if (firstVisibleItems != null && firstVisibleItems.length > 0) {
pastVisibleItems = firstVisibleItems[0];
}
if (loading) {
if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
loading = false;
...// Some Async call to backend
AsyncCall.onSuccess(Response response){
mAdapter.addItems(response);
mAdapter.notifyDataSetChanged();
}
}
}
});
它不起作用:mAdapter.addItems(response)
。我是否需要指定附加项目的最后位置?
如何在添加new items
和scrolldown
之间加载微调器?
AddItems代码
public void addItems(List<Model> response) {
size = response.size();
model = response;
}
BTW我试图在AsyncCall.onSuccess:
之前添加此代码 mProgressBar = (ProgressBar) mActivity.findViewById(R.id.progress_bar);
mProgressBar.setBackgroundColor(Color.parseColor("#ff3c3f41"));
mProgressBar.setVisibility(View.VISIBLE);
答案 0 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</ListView>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="48dp"
android:indeterminate="true"
android:visibility="gone"/>
</LinearLayout>
你做了一个类似的布局,在底部保持进度条的可见性不见了,当你从服务器加载数据时,你只需要在进度条上调用setVisibility。
对于问题的第一部分,只需将代码更改为此。您的代码的问题在于,即使您调用函数addItems,它也不是完全将项添加到模型列表中,而是将其替换为响应,您应该在列表上添加.addAll()函数以将列表中的项添加到另一个列表中。如果您无法访问addAll函数,只需遍历响应列表并将每个项目添加到模型列表中。
public void addItems(List<Warehouse> response) {
size = warehouses.size() + response.size();
warehouses.addAll(response);
}