【发布时间】:2020-05-01 16:13:55
【问题描述】:
我在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。那么我怎样才能得到 visibleItemPosition 表单recyclerView 呢?谢谢。
【问题讨论】:
-
它返回
0,因为第一项实际上是“第一个可见项”。在这种情况下,“第一个可见项”只是第一个绑定视图持有者的位置。当您将 RecyclerView 放入 NestedScrollView 时,不会发生回收,所有项目始终绑定,因此第一个绑定的视图持有者始终是第一个。这是因为 RecyclerView 具有未绑定的高度,因此它会占用所有空间。 -
谢谢。有没有办法解决这个问题?
-
我认为可以制作自定义布局管理器,但这似乎很复杂,我不知道该怎么做。为什么你需要一个 NestedScrollView 开始?我猜您在 RecyclerView 上方或下方显示了其他视图?在这种情况下,您需要放弃 NestedScrollView 并使用多种视图类型显示这些视图。
-
是的。我也有一个 recyclerView 在这下面。这将是很长的解释,那么为什么我使用它而不是多个视图类型呢?我有 2 个 recyclerviews,我从不同的来源为他们获取数据。第二个recyclerview也有分页,但第一个没有,我只需要一次更新第二个recyclerview。
-
不过还是谢谢你,我会尽力用多种视图类型来实现它
标签: java android android-recyclerview android-nestedscrollview