Android在RecyclerView中获得可见子对象的计数
我试图知道用户在recyclerview中可以看到多少项,在某些设备中,此计数不同,我无法使用以下代码计算:Android在RecyclerView中获得可见子对象的计数,android,android-recyclerview,Android,Android Recyclerview,我试图知道用户在recyclerview中可以看到多少项,在某些设备中,此计数不同,我无法使用以下代码计算: private int countVisibleRow() { if (messagesView.getLayoutManager() != null) { LinearLayoutManager layoutManager = (LinearLayoutManager) messagesView.getLayoutManager(); int
private int countVisibleRow() {
if (messagesView.getLayoutManager() != null) {
LinearLayoutManager layoutManager = (LinearLayoutManager) messagesView.getLayoutManager();
int first = layoutManager.findFirstVisibleItemPosition();
int last = layoutManager.findLastVisibleItemPosition();
return last - first;
} else {
return 0;
}
}
无论何时滚动recylerView,都将代码放入onScroll listner方法中此方法将被激发(将此代码放入构造函数中的适配器类中)
无论何时滚动recylerView,都将代码放入onScroll listner方法中此方法将被激发(将此代码放入构造函数中的适配器类中) 尝试以下方法:
public class LinearLayoutManagerWithSmoothScroller extends LinearLayoutManager {
public LinearLayoutManagerWithSmoothScroller(Context context) {
super(context, HORIZONTAL, false);
}
@Override
public int findFirstVisibleItemPosition() {
return super.findFirstVisibleItemPosition();
}
@Override
public int findLastVisibleItemPosition() {
return super.findLastVisibleItemPosition();
}
public LinearLayoutManagerWithSmoothScroller(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position) {
RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext());
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
private class TopSnappedSmoothScroller extends LinearSmoothScroller {
public TopSnappedSmoothScroller(Context context) {
super(context);
}
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return LinearLayoutManagerWithSmoothScroller.this
.computeScrollVectorForPosition(targetPosition);
}
@Override
protected int getVerticalSnapPreference() {
return SNAP_TO_START;
}
}
}
layoutmanager = new LinearLayoutManagerWithSmoothScroller(QuestionsActivity.this);
paginationRV.setLayoutManager(layoutmanager);
使用方法如下:
public class LinearLayoutManagerWithSmoothScroller extends LinearLayoutManager {
public LinearLayoutManagerWithSmoothScroller(Context context) {
super(context, HORIZONTAL, false);
}
@Override
public int findFirstVisibleItemPosition() {
return super.findFirstVisibleItemPosition();
}
@Override
public int findLastVisibleItemPosition() {
return super.findLastVisibleItemPosition();
}
public LinearLayoutManagerWithSmoothScroller(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position) {
RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext());
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
private class TopSnappedSmoothScroller extends LinearSmoothScroller {
public TopSnappedSmoothScroller(Context context) {
super(context);
}
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return LinearLayoutManagerWithSmoothScroller.this
.computeScrollVectorForPosition(targetPosition);
}
@Override
protected int getVerticalSnapPreference() {
return SNAP_TO_START;
}
}
}
layoutmanager = new LinearLayoutManagerWithSmoothScroller(QuestionsActivity.this);
paginationRV.setLayoutManager(layoutmanager);
尝试以下方法:
public class LinearLayoutManagerWithSmoothScroller extends LinearLayoutManager {
public LinearLayoutManagerWithSmoothScroller(Context context) {
super(context, HORIZONTAL, false);
}
@Override
public int findFirstVisibleItemPosition() {
return super.findFirstVisibleItemPosition();
}
@Override
public int findLastVisibleItemPosition() {
return super.findLastVisibleItemPosition();
}
public LinearLayoutManagerWithSmoothScroller(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position) {
RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext());
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
private class TopSnappedSmoothScroller extends LinearSmoothScroller {
public TopSnappedSmoothScroller(Context context) {
super(context);
}
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return LinearLayoutManagerWithSmoothScroller.this
.computeScrollVectorForPosition(targetPosition);
}
@Override
protected int getVerticalSnapPreference() {
return SNAP_TO_START;
}
}
}
layoutmanager = new LinearLayoutManagerWithSmoothScroller(QuestionsActivity.this);
paginationRV.setLayoutManager(layoutmanager);
使用方法如下:
public class LinearLayoutManagerWithSmoothScroller extends LinearLayoutManager {
public LinearLayoutManagerWithSmoothScroller(Context context) {
super(context, HORIZONTAL, false);
}
@Override
public int findFirstVisibleItemPosition() {
return super.findFirstVisibleItemPosition();
}
@Override
public int findLastVisibleItemPosition() {
return super.findLastVisibleItemPosition();
}
public LinearLayoutManagerWithSmoothScroller(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position) {
RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext());
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
private class TopSnappedSmoothScroller extends LinearSmoothScroller {
public TopSnappedSmoothScroller(Context context) {
super(context);
}
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return LinearLayoutManagerWithSmoothScroller.this
.computeScrollVectorForPosition(targetPosition);
}
@Override
protected int getVerticalSnapPreference() {
return SNAP_TO_START;
}
}
}
layoutmanager = new LinearLayoutManagerWithSmoothScroller(QuestionsActivity.this);
paginationRV.setLayoutManager(layoutmanager);
结果是什么?recyclerview的整个概念是,你不必担心有多少是可见的。LayoutManager为每个设备相应地处理它,还可以缓存更多的行。你为什么需要可见的计数?@OrkunKoçyiğit我明白了zero@Mahdi.Pishguy试试我的解决方案结果如何?recyclerview的整个概念是,你不必担心有多少是可见的。LayoutManager为每个设备相应地处理它,还可以缓存更多的行。你为什么需要可见的计数?@OrkunKoçyiğit我明白了zero@Mahdi.Pishguy请尝试我的解决方案,以便在项目对用户可见时如何获取项目的计数?使用与获取layoutmanger.findLastVisibleItemPosition()相同的方法但请确保layoutmanager是LinearLayoutManager的实例,带有SmoothScroller类默认情况下,我在recyclerView上有两个可见项,但我得到
-1
always@Mahdi.Pishguy你在LayoutManager.findLastVisibleItemPosition()中得到了什么那个么,当项目对用户可见时,如何获取项目的数量呢?使用与获取layoutmanger.findLastVisibleItemPosition()相同的方法但请确保layoutmanager是LinearLayoutManager的实例,带有SmoothScroller类默认情况下,我在recyclerView上有两个可见项,但我得到-1
always@Mahdi.Pishguylayoutmanger.findLastVisibleItemPosition()@shahis17june不滚动项目怎么样?@shahis17june不滚动项目怎么样?