android - 使回收视图在任一方向水平滚动
问题描述
我正在尝试创建一个列表以水平滚动任一方向。基于如何创建循环(无限)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() 仍然使用相同的位置逻辑。
解决方案
我可以通过在 onBindViewHolder() 中添加 onClickListner 来解决这个问题。与在视图中和使用 getAbsoluteposition() 相比,这返回了正确的位置。
推荐阅读
- jenkins - Jenkins 的 findbugs Gradle 构建
- php - Node js socket.io 仅针对特定事件订阅广播
- python-3.x - 自动化 pdfminer.six LAParams 配置
- html - 我的下拉菜单无法正常工作
- javafx - JavaFX:如何检测 TitledPane 中的渲染结束?
- apache-kafka - Configuring ReplyingKafkaTemplate for getting the responses from multiple topics
- ms-access-2016 - MS Access:如何在按钮单击表单上运行查询?
- json - 如何使用 XSLT 将 JSON 转换为 XML?
- php - 运行时 PHPUnit 的代码覆盖率
- javascript - 填充下拉点击它