首页 > 解决方案 > 使回收视图在任一方向水平滚动

问题描述

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

标签: androidandroid-recyclerview

解决方案


我可以通过在 onBindViewHolder() 中添加 onClickListner 来解决这个问题。与在视图中和使用 getAbsoluteposition() 相比,这返回了正确的位置。


推荐阅读