我正在尝试创建一个列表以在任意方向上滚动。基于How do I create a circular (endless) RecyclerView?上的解决方案,我能够让它无休止地向右移动,但如果我向左移动则不起作用。
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
firstVisibleItemPos = ListLayoutManager.findFirstVisibleItemPosition();
if (firstVisibleItemPos != 0 && firstVisibleItemPos % items.size() == 0) {
recyclerView.getLayoutManager().scrollToPosition(firstVisibleItemPos %
items.size());
}else if(firstVisibleItemPos == 0 && items.size() > 0){
int newPos = items.size() / 2;
recyclerView.getLayoutManager().scrollToPosition(newPos);
}
}
@Override
public int getItemCount() {
return Items== null ? 0 : Items.size() * 2;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
position = position % categoryViewItems.size();
... some code for displaying here
}
我尝试使用Integer.MAX_VALUE但是当我点击该项目时导致错误的位置。
有没有办法让我走在左边0 ... n-5,n-4,n-3,n-2,n-1,n,0,1,2,3,4,5 ,... N
****************编辑************************
尝试
@Override
public int getItemCount() {
return Items== null ? 0 : Integer.MAX_VALUE;
}
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
firstVisibleItemPos =
ListLayoutManager.findFirstVisibleItemPosition();
if (firstVisibleItemPos != 0 && firstVisibleItemPos % items.size() == 0)
{
recyclerView.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2);
}else if(firstVisibleItemPos == 0 && items.size() > 0){
recyclerView.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2);
}
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Item selectedItem = Items.get(getAdapterPosition());
currentlySelectedItem = selectedItem ;
notifyDataSetChanged();
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
} catch (Exception exc) {
exc.printStackTrace();
}
}
});
}
getAdapterPosition()返回错误的位置,onBindViewHolder()仍然使用相同的位置逻辑。
答案 0 :(得分:1)
我能够通过在onBindViewHolder()中添加onClickListner来解决这个问题。与viewholder和使用getAbsoluteposition()进行比较时,返回正确的位置。