Fra*_*riu 18 android endlessscroll staggeredgridlayout android-recyclerview
我已经尝试为LinearLayoutManager实现无限滚动并且它成功并尝试将LinearLayoutManager实现复制到StaggeredGridLayoutManager但它不起作用.
我只想获得firstVisibleItem.
在LinearLayoutManager中:
int firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition(int);
Run Code Online (Sandbox Code Playgroud)
但在StaggeredGridLayoutManager中是:
int firstVisibleItem = staggeredGridLayoutManager.findFirstVisibleItemPositions(int[])
Run Code Online (Sandbox Code Playgroud)
如何使用(int)not(int [])获取firstVisibleItem?
对此有什么好的方法/实施吗?
提前致谢.
Mat*_*hew 20
我搞定了:
您可以在StaggeredGridLayoutManager中使用以下两种方法之一:
传递一个空的int数组,该数组将使用位置初始化并使用对您有意义的数组.
private boolean loading = true;
private int pastVisibleItems, visibleItemCount, totalItemCount;
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener({
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
visibleItemCount = mLayoutManager.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
int[] firstVisibleItems = null;
firstVisibleItems = mLayoutManager.findFirstVisibleItemPositions(firstVisibleItems);
if(firstVisibleItems != null && firstVisibleItems.length > 0) {
pastVisibleItems = firstVisibleItems[0];
}
if (loading) {
if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
loading = false;
Log.d("tag", "LOAD NEXT ITEM");
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的一个实现ScrollListener
.
这是我实现的代码ScrollListener
:
private EndlessScrollListener scrollListener =
new EndlessScrollListener(new EndlessScrollListener.RefreshList() {
@Override public void onRefresh(int pageNumber) {
//Here you can execute server connection or anything else to update data and present with Recycler view
// Notice: It is sync method
}
});
recyclerView.addOnScrollListener(scrollListener);
Run Code Online (Sandbox Code Playgroud)
自定义ScrollListener
类:
class EndlessScrollListener extends RecyclerView.OnScrollListener {
private boolean isLoading;
private boolean hasMorePages;
private int pageNumber = 0;
private RefreshList refreshList;
private boolean isRefreshing;
private int pastVisibleItems;
public EndlessScrollListener(RefreshList refreshList) {
this.isLoading = false;
this.hasMorePages = true;
this.refreshList = refreshList;
}
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
StaggeredGridLayoutManager manager =
(StaggeredGridLayoutManager) recyclerView.getLayoutManager();
int visibleItemCount = manager.getChildCount();
int totalItemCount = manager.getItemCount();
int[] firstVisibleItems = manager.findFirstVisibleItemPositions(null);
if (firstVisibleItems != null && firstVisibleItems.length > 0) {
pastVisibleItems = firstVisibleItems[0];
}
if ((visibleItemCount + pastVisibleItems) >= totalItemCount && !isLoading) {
isLoading = true;
if (hasMorePages && !isRefreshing) {
isRefreshing = true;
new Handler().postDelayed(new Runnable() {
@Override public void run() {
refreshList.onRefresh(pageNumber);
}
}, 200);
}
} else {
isLoading = false;
}
}
public void noMorePages() {
this.hasMorePages = false;
}
public void notifyMorePages() {
isRefreshing = false;
pageNumber = pageNumber + 1;
}
public interface RefreshList {
void onRefresh(int pageNumber);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 -1
int mSpanCount = 2;
int[] into = new int[mSpanCount];
int firstVisibleItem = staggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7398 次 |
最近记录: |