【问题标题】:update position of recyclerview when scrolling (android)滚动时更新recyclerview的位置(android)
【发布时间】:2017-04-20 04:13:15
【问题描述】:

如何更新滚动位置。现在,每次我点击项目时,位置都会更新。我想在每次滚动时更新位置。我想做的是有一个文本视图,它会在滚动项目时更新。

recyclerView.addOnItemTouchListener(new GalleryAdapter.RecyclerTouchListener(this, recyclerView, new GalleryAdapter.ClickListener()
            {

                @Override
                public void onClick(View view, int position) {

                    Intent intent = new Intent(mainActivityCarasoul.this, PDFViewerActivity.class);
                    intent.putExtra(PDFViewerActivity.TAG, books.get(position));
                    intent.putExtra("from", "mainActivityCarasoul");
                    startActivity(intent);
                }
                @Override
                public void onLongClick(View view, int position) {
                }
            }));

            recyclerView.addOnScrollListener(new CenterScrollListener());

            recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                   // title.setText(books.get(position).getName());

                }
            });

【问题讨论】:

标签: android android-recyclerview


【解决方案1】:

您好,您可以使用以下代码,

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
    {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy)
        {
            GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager());
            int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
            int findFirstCompletelyVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
            int findLastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
            int findLastCompletelyVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition();
        }
    });

【讨论】:

  • 我收到此错误 java.lang.ClassCastException: com.azoft.carousellayoutmanager.CarouselLayoutManager cannot be cast to android.support.v7.widget.GridLayoutManager
  • 我认为你 setLayoutManager 是 CarouselLayoutManager ,所以你可以在上面的代码中将 GridLayoutManager 更改为 CarouselLayoutManager 。即 CarouselLayoutManager layoutManager = ((CarouselLayoutManager )mRecyclerView.getLayoutManager());
  • 是的,我试过了,但我在这 4 行中发现错误 findFirstVisibleItemPosition();
  • 我不确定您的轮播布局中是否有那些 api 不可用,以便检查您可以更改为网格
【解决方案2】:

使用它,您将必须在您的活动中维护一个 previousPosition,并在您的适配器类中维护一个 selectedItem 作为 int intialize previousPoistion=-1;和 selectedPosition=1;

 @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            switch (newState) {
                case 0:
                    int pos = linearLayoutManager1.findLastVisibleItemPosition();
                    yourAdapter.selectedPosition = pos - 1;
                    previousPosition = pos - 1;
                    yourTextView.setText(yourLIst.get(pos-1));
                    break;
            }
        }
    });

在你的 onBindView 适配器中

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
if (position == selectedPosition) {
             //do what you want when selected
            } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多