gpt4 book ai didi

java - findFirstVisibleItemPosition() 在 nestedScrollView 中返回 0

转载 作者:行者123 更新时间:2023-12-04 23:55:19 29 4
gpt4 key购买 nike

我在 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。但它返回 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。那么如何从 recyclerView 中获取 visibleItemPosition 呢?谢谢。

最佳答案

解决此问题的最简单方法是将 NestedScrollView 替换为简单的 ScrollView。这当然会改变布局的行为,但它会向您显示正确的位置。

NestedScrollView 的情况下,findFirstVisibleItemPosition() 总是返回 0findLastVisibleItemPosition() 总是返回最后一个RecyclerView 中的项目,无论它们是否对用户可见。发生这种情况是因为放置在 NestedScrollView 中的 RecyclerView 表现得像 ListView 而没有进行任何回收。这意味着所有项目都同时可见,因为所有项目都同时绑定(bind)。

关于java - findFirstVisibleItemPosition() 在 nestedScrollView 中返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61546309/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com