- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 RecyclerView.OnScrollListener
的 onScrolled()
方法中,我需要能够区分滚动事件的两个不同来源:
RecyclerView
RecyclerView
使用 scrollToPosition()
onScrolled()
没有似乎涵盖此内容的参数。是否有进行这种区分的秘诀?
FWIW,我的场景:我有两个 RecyclerView
小部件。一个是 master,显示一个传统的垂直列表。另一个用作 ViewPager
替代品,允许滑动浏览垂直列表中相同项目的详细信息。在大屏幕环境中,两个 RecyclerView
小部件将同时可见(主从模式),我需要使它们保持同步。如果用户滑动寻呼机 RecyclerView
,我需要更改列表 RecyclerView
行上的指示器以匹配。如果用户点击列表 RecyclerView
中的一行,我需要更新寻呼机 RecyclerView
中的当前页面。为了监听寻呼机上的滑动事件,我使用了 OnScrollListener
,但当我滚动寻呼机以响应列表行点击时,它也会被触发。
最佳答案
Gabe Sechan 关于使用滚动状态更改的建议是一个很好的建议。
不幸的是,滚动状态没有监听器——它需要您子类化 RecyclerView
。因此,我创建了一个 RecyclerViewEx
来为该事件添加一个监听器 API:
public class RecyclerViewEx extends RecyclerView {
interface OnScrollStateChangedListener {
void onScrollStateChanged(int state);
}
final private ArrayList<OnScrollStateChangedListener> listeners=new ArrayList<>();
public RecyclerViewEx(Context context) {
super(context);
}
public RecyclerViewEx(Context context, @Nullable
AttributeSet attrs) {
super(context, attrs);
}
public RecyclerViewEx(Context context, @Nullable AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public void addOnScrollStateChangedListener(OnScrollStateChangedListener listener) {
listeners.add(listener);
}
public void removeOnScrollStateChangedListener(OnScrollStateChangedListener listener) {
listeners.remove(listener);
}
@Override
public void onScrollStateChanged(int state) {
super.onScrollStateChanged(state);
for (OnScrollStateChangedListener listener : listeners) {
listener.onScrollStateChanged(state);
}
}
}
scrollToPosition()
不会触发滚动状态更改,而用户滑动会。因此,我可以通过这种方式区分这两种情况。
rve.addOnScrollStateChangedListener(
scrollState -> {
if (scrollState==RecyclerView.SCROLL_STATE_IDLE) {
// do something cool, now that the user swipe is complete
}
});
鉴于此,我不需要标志或任何其他状态,这有助于简化逻辑。
关于android - 我们如何区分 RecyclerView.OnScrollListener 中的用户滚动和 scrollToPosition() 滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649695/
我在 拉动刷新布局 中有一个 recyclerView。我添加了一个 onScrollListener,通过将 delta Y (dy) 添加/减去一个名为 totalScrolled 的变量来跟踪总
我有一个问题。我的 onScrollListener 不起作用,而 onScrollListener 之后的 onItemClickListener 工作正常。这是我的代码: public View
向相反方向滚动不起作用。 我明白我错了只是通过Presenter重新更新View中的数据,并且必须它们都可用RecyclerView 当加载下一部分数据时,RecyclerView没有时间显示最后一个
学习如何使用 OnScrollListener 并且我想做一个方法来检测每次当用户在 ListView 中向上或向下滚动时新的列表项是可见的,如果用户向下滚动我想做一个计数器增量1 对于进入屏幕的每个
我有chrisbanes PullToRefresh lib在我的项目中工作。现在我需要拦截滚动事件来添加一些逻辑,似乎库准备设置onScrollListener,我尝试添加一个 myList.set
我有 gridview,我需要做两件事: 当我向下滚动时,我想找到最后一个可见位置,例如 int index = GridView.getLastVisiblePosition(); 当我向上滚动时,
我在 json 中有大约 32 条记录,我正在使用 RecyclerView 来显示它们并且我已经实现了 OnScrollListener(...) 问题 我启动了一个 Activity ,我获取了所
似乎有很多关于如何向上滚动以获得更多帖子的帖子,我之前已经发布了一个问题:Adding items to Endless Scroll RecyclerView with ProgressBar at
我已经使用 LazyAdapter 创建了一个 ListView 。 当我滚动到列表底部时,新数据会出现,但它会清除所有旧数据。 如何将新数据附加到旧数据下方? 这是我的主要 Activity 代码
请原谅我的英语,我是法国人...... 那么,我有一个关于我的 Android 应用程序的问题。我必须将 GridView 集成为 Pinterest 样式。我找到了这个库:交错 GridView (
我需要 2 个 listView 的同步滚动(垂直和水平) 我尝试了几个用于水平 ListView 的库,但没有库实现 OnScrollListener() https://github.com/Me
我在 ListFragment 中实现了 OnScrollListener 接口(interface),我想在列表的最后一个元素可见时更改文本,但它不起作用。我没有找到类似问题的示例(ListFrag
我从服务器获得 500 条记录..我想在 ListView 中显示 10 个项目,当 ListView 结束时我需要加载另外 10 个,依此类推..我在网上看到很多例子,但我无法解决请帮助我。 这是我
我想在我的应用程序中创建一个无限滚动的 RecyclerView。它使用 Web 服务并在屏幕上显示一些 CardView 项目。这是我到目前为止的简化代码,没有包含 RecyclerView 创建等
我为 RecyclerView 实现了一个 OnScrollListener,如下所示: new RecyclerView.OnScrollListener() { @Override
我在函数中加载 RecyclerView 和 ScrollListener 这是在其中设置 ScrollListener 的代码(我删除了该问题不必要的所有内容): recyclerViewM
根据以下文档https://developer.android.com/reference/android/support/v7/widget/RecyclerView.OnScrollListene
我见过一些使用 OnScrollListener 的 ListView 动态增长实现。 我想知道,有没有更优雅的解决方案?如果 Adapter 说有更多项目可用,ListView 本身不会从 Adap
我有一个 FragmentPagerAdapter 创建它的子页面(它们是 ListFragments),如下所示: @Override public Fragment getItem(int pos
我有一个带有 OnScrollListener 和 OnItemClickListener 的 ListView。当我点击一个项目时,OnScrollListener 和 OnItemClickLis
我是一名优秀的程序员,十分优秀!