findFirstVisibleItemPosition() returns 0 inside nestedScrollView
findFirstVisibleItemPosition() returns 0 inside nestedScrollView
我在nestedScrollView
里面有一个recyclerView
。我知道这是一种不好的做法,但有些情况下,我只能用这种方式处理。
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScroll"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_data"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="1"
tools:listitem="@layout/item_favorite_tournament"
tools:visibility="visible" />
</androidx.core.widget.NestedScrollView>
这是我的代码。我将向您展示滚动部分,我需要在其中获取 firstVisibleItemPosition
。但是它 returns 0.
private void initList(RecyclerView recycler, View labelNoResults) {
recycler.setAdapter(mAdapter);
recycler.setHasFixedSize(true);
mListLayoutManager = Objects.requireNonNull((LinearLayoutManager) recycler.getLayoutManager());
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
final int p = mListLayoutManager.findFirstVisibleItemPosition();
Log.d("Tag_1", "Position: " + p);
}
});
}
我认为问题出在 nestedScrollView
。那么如何才能获得 visibleItemPosition 形式 recyclerView
?谢谢。
解决此问题的最简单方法是将 NestedScrollView
替换为 ScrollView
。这当然会改变布局的行为,但它会向您显示正确的位置。
在 NestedScrollView
的情况下,findFirstVisibleItemPosition()
总是 returns 0
和 findLastVisibleItemPosition()
总是 returns RecyclerView
中的最后一项,尽管它们是否是否对用户可见。发生这种情况是因为 RecyclerView
放置在 NestedScrollView
中表现得像 ListView
而没有进行任何回收。这意味着所有项目同时可见,因为所有项目都同时绑定。
我在nestedScrollView
里面有一个recyclerView
。我知道这是一种不好的做法,但有些情况下,我只能用这种方式处理。
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScroll"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_data"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="1"
tools:listitem="@layout/item_favorite_tournament"
tools:visibility="visible" />
</androidx.core.widget.NestedScrollView>
这是我的代码。我将向您展示滚动部分,我需要在其中获取 firstVisibleItemPosition
。但是它 returns 0.
private void initList(RecyclerView recycler, View labelNoResults) {
recycler.setAdapter(mAdapter);
recycler.setHasFixedSize(true);
mListLayoutManager = Objects.requireNonNull((LinearLayoutManager) recycler.getLayoutManager());
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
final int p = mListLayoutManager.findFirstVisibleItemPosition();
Log.d("Tag_1", "Position: " + p);
}
});
}
我认为问题出在 nestedScrollView
。那么如何才能获得 visibleItemPosition 形式 recyclerView
?谢谢。
解决此问题的最简单方法是将 NestedScrollView
替换为 ScrollView
。这当然会改变布局的行为,但它会向您显示正确的位置。
在 NestedScrollView
的情况下,findFirstVisibleItemPosition()
总是 returns 0
和 findLastVisibleItemPosition()
总是 returns RecyclerView
中的最后一项,尽管它们是否是否对用户可见。发生这种情况是因为 RecyclerView
放置在 NestedScrollView
中表现得像 ListView
而没有进行任何回收。这意味着所有项目同时可见,因为所有项目都同时绑定。