【问题标题】:Recyclerview scroll to a specific positionRecyclerview 滚动到特定位置
【发布时间】:2018-08-28 18:49:20
【问题描述】:

我有一个不同类别的recyclerview。每个类别都有自己的产品。但是,为了获取产品,我们必须调用与类别相关的 API,并将这些产品作为水平 recyclerview 加载到类别项中。这一切都很好。

我应该只在用户滚动到特定类别时调用产品 API。当用户滚动到特定类别时,我需要调用产品列表 API 并显示在类别项中。

我的问题是我无法识别recyclerview 中当前可见的项目,并且在滚动时找不到可见项目。

【问题讨论】:

  • 你可以添加 scrollListener 并从 recyclerview 那里获取 currentScrollPosition 然后检查它
  • 这个问题对我来说有点不清楚......特别是第二段......
  • 在您的 BindViewHolder 方法中检查特殊类别,当调用该特殊类别时,通过接口将其传递给您的活动

标签: android android-recyclerview


【解决方案1】:

试试这个:

@BindView(R.id.general_layout)
RecyclerView recyclerView;

最后滚动:

recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount());

在适配器类中:

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

            ViewHolder(View itemView) {
                super(itemView);
                itemView.setOnClickListener(this);
            }

            @Override
            public void onClick(View view) {
                if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
            }
        }

// convenience method for getting data at click position
    private YourItemType getItem(int id) {
        return mData.get(id);
    }

    // allows clicks events to be caught
    public void setClickListener(ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }

    // parent activity will implement this method to respond to click events
    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }

【讨论】:

    【解决方案2】:

    添加一个 onScrolledListener 并从布局管理器中获取最后一个可见项。 一旦最后一个可见项目到达您的小部件的索引,请进行 API 调用。

       recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }
    
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            int lastVisibleItemIndex = recyclerView.getLayoutManager().findLastVisibleItemPosition();
             //When the position reaches the element or the one 
    
             }
    
        });
    

    【讨论】:

    • onScrolled 在第一次加载时只调用一次..然后在滚动时它不会被调用
    • 这不应该发生。你能包含你的布局文件吗?
    • 它在滚动视图中。这就是它发生的原因..这是一个主页布局。我把它放在一个父滚动视图中。然后是一个具有垂直方向的线性布局。在它里面是一个用于显示滑块的滑块视图,然后是我们的回收器视图。我如何修改它。?如果我删除 scrollview ,滚动时滑块不会向上移动..请帮帮我?
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多