java - 如何找出回收站 View 捕捉到的项目?

标签 java android android-recyclerview

我有一个回收器 View ,它使用 LinearSnapHelper 在用户滚动时捕捉项目。现在,我想听快照,最好是获取被快照项目的索引。但是,我真的不知道是否有办法做到这一点。

最初我认为 LinearSnapHelperfindTargetSnapPosition() 会返回索引以捕捉(如文档所述),但事实并非如此。它为第一项随机返回 -1 或 0,当滚动列表时,它会被随机调用。有时,根本没有调用该方法;有时,索引不正确,有时是正确的。看来尝试使用它来查找索引是没有用的。

那么:我如何找出回收站 View 捕捉到的项目?

最佳答案

我设法让它工作。我不确定这是否是最佳解决方案,但这是我所做的:

private int selectedPosition = -1;
private LinearLayoutManager layoutManager;
private RecyclerView recyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...

    LinearSnapHelper snapHelper = new LinearSnapHelper() {
        @Override
        public View findSnapView(RecyclerView.LayoutManager layoutManager) {
            View view = super.findSnapView(layoutManager);

            if (view != null) {
                final int newPosition = layoutManager.getPosition(view);

                if (newPosition != selectedPosition && recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) {
                    onViewSnapped(newPosition);
                    selectedPosition = newPosition;
                }

            }

            return view;
        }
    };

    ...
}

private void onViewSnapped(int index) {
    // YOUR CODE HERE
}

关于java - 如何找出回收站 View 捕捉到的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872036/

相关文章:

java - Spark SQL - CASE-THEN 的 JAVA 语法?

firebase - recyclerview 的 onBindViewHolder 中的 Android Firebase 监听器

android - RecyclerView overdraw 项目

android - 如何在 Recyclerview.ViewHolder 的 OncreateViewHolder 中更改布局

java - 更改一个对象的属性时替换重复代码的设计模式

java - 接口(interface)和抽象类

java - Cassandra 在保存 java.util.UUID 时说 "InvalidQueryException: Invalid version for TimeUUID type"

android - 在 Android 中使用 Retrofit 从具有多个对象的 JSON 中读取特定的名称值对

android - Edittext 随动画改变宽度

android - Android应用程序中webview中的自定义字体