Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果项目不完全可见,如何平滑滚动RecyclerView_Android_Android Layout_Android Recyclerview - Fatal编程技术网

Android 如果项目不完全可见,如何平滑滚动RecyclerView

Android 如果项目不完全可见,如何平滑滚动RecyclerView,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我想实现这一点 我想检查点击的项目是否完全可见,如果不是,我想平滑地向上/向下滚动。我有一个带有3列的GridLayoutManager。这些项目的大小都相同,只是imageview 我可以让RecyclerView滚动显示: @Override public void onClick(View view) { int adapterPosition = RecHolder.this.getAdapterPosition(); mRecyclerView

我想实现这一点

我想检查点击的项目是否完全可见,如果不是,我想平滑地向上/向下滚动。我有一个带有3列的
GridLayoutManager
。这些项目的大小都相同,只是
imageview

我可以让RecyclerView滚动显示:

@Override
    public void onClick(View view) {
        int adapterPosition = RecHolder.this.getAdapterPosition();
        mRecyclerView.scrollToPosition(adapterPosition);
        ...
}
但它不是一个“卷轴”,它是非常落后和方式太快。
如果我尝试使用
mRecyclerView.smoothScrollToPosition(adapterPosition)结果是相同的。完全相同的运动,没有明显的区别。

不要费心测试它是否不完全可见。只需插入一个命令即可滚动到该位置。由于您没有发布任何代码,我无法具体说明您将如何执行。我个人让我的适配器创建一个意图,我的活动处理该意图。如果这就是您正在做的,那么您可以像这样额外包含getAdapterPosition()(vh是我的ViewHolder)

然后活动中的接收者可以获取
SELECT\u ITEM\u TAPPED\u POS

int pos = intent.getIntExtra(SelectItemGridAdapter.SELECT_ITEM_TAPPED_POS, -1);
if (pos > -1)
    rv.scrollToPosition(pos);

嗯,迈克

我真的很高兴听到一个更好的。你显然知道观察者模式是什么,回调是什么
OnClickListener()
就是一个例子,所以我假设是。但是,您正在使用相对昂贵的LocalBroadcast/Intent将打包的原语发送到托管
活动
——这有什么意义?使用回调,这就是所需的一切,无论是由
活动实现的接口还是使用RxJava之类的库,比如:。另外,这看起来就像是你使用过的一些代码的复制粘贴,而不是作为问题的答案定制的。我对Android有点陌生,这是我的第一个项目。其目的(请原谅双关语)是使视图可重用并与活动解耦。因此,它所要做的就是向它的所有者宣布某个东西被点击/长时间点击,并让活动决定要做什么。在那里,回调是一个有趣的想法。我去看看。你的样品没有包括一个,但我会看看是否能找到一个。至于它不是针对这个问题定制的,它是一个解决方案,当点击它时,它会将项目滚动到适当的位置。OP没有暗示他的实现。接口是解耦的,它只是任何类都可以实现的契约。这种模式在任何事件驱动的OS/框架中都很常见。我建议您开始寻找RxJava,它完全是关于观察者和观察者的,它基于观察者模式的思想构建,是一个流行的库(我相信它现在有9+语言实现),而且它独立于Android,这意味着它只是纯Java。同样关于OP的问题,它应该被关闭,因为它的质量很差,而且离这个很远-所以我能够让RecyclerView滚动到点击的项目,这很好,但我不能实现平滑滚动,所以它实际上看起来不像是滚动的,但它只是“传送”到视图中的项目,它非常滞后@马克基恩:答案怎么了?很直截了当我加了一些细节
int pos = intent.getIntExtra(SelectItemGridAdapter.SELECT_ITEM_TAPPED_POS, -1);
if (pos > -1)
    rv.scrollToPosition(pos);