Make Recycle视图在任一方向上水平滚动

时间:2018-05-29 21:08:44

标签: android android-recyclerview

我正在尝试创建一个列表以在任意方向上滚动。基于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()仍然使用相同的位置逻辑。

1 个答案:

答案 0 :(得分:1)

我能够通过在onBindViewHolder()中添加onClickListner来解决这个问题。与viewholder和使用getAbsoluteposition()进行比较时,返回正确的位置。