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

时间:2017-09-08 21:43:34

标签: android android-layout android-recyclerview

我想实现这个

this

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

我可以通过以下方式滚动RecyclerView:

@Override
    public void onClick(View view) {
        int adapterPosition = RecHolder.this.getAdapterPosition();
        mRecyclerView.scrollToPosition(adapterPosition);
        ...
}

但它不是"滚动",它非常懒散,太快了。 如果我尝试使用mRecyclerView.smoothScrollToPosition(adapterPosition);,结果是一样的。完全相同的运动,没有明显的差异。

1 个答案:

答案 0 :(得分:-1)

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

vh.mImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        SelectItemGridAdapter.ContentViewHolder vh = (SelectItemGridAdapter.ContentViewHolder) (((View)v.getParent()).getTag());
        Intent intent = new Intent(ACTION_SELECT_Item);
        intent.putExtra(Constants.MSG_TYPE, SELECT_ITEM_TAPPED);
        intent.putExtra(SELECT_ITEM_TAPPED_ID, vh.viewModel.mItemId);
        intent.putExtra(SELECT_ITEM_TAPPED_POS, vh.getAdapterPosition());
        LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
    }
});

然后,活动中的收件人可以获得SELECT_ITEM_TAPPED_POS值...

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

HTH,迈克