我想实现这个
。
我想检查点击的项目是否完全可见,如果不是,我想顺利向上/向下滚动。我有一个GridLayoutManager
有3列。这些项目的大小都相同,只是ImageViews
。
我可以通过以下方式滚动RecyclerView:
@Override
public void onClick(View view) {
int adapterPosition = RecHolder.this.getAdapterPosition();
mRecyclerView.scrollToPosition(adapterPosition);
...
}
但它不是"滚动",它非常懒散,太快了。
如果我尝试使用mRecyclerView.smoothScrollToPosition(adapterPosition);
,结果是一样的。完全相同的运动,没有明显的差异。
答案 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,迈克