【问题标题】:How to fix unexpected behavior on viewpager in recyclerview when fast scrolling?快速滚动时如何修复recyclerview中viewpager上的意外行为?
【发布时间】:2019-05-07 08:51:47
【问题描述】:

我的 RecyclerView 在每一行都有几个可滑动按钮的 viewpager。

当我在默认状态下快速滚动时,它工作正常。

但某些视图(页面)部分显示在默认页面上。我可以看到他们从之前的刷卡页面刷到默认页面(实际上不是他们的。单行在上面回收)

有时会出现非常小的“部分视图”,即使它们被设置为默认值,如下所示。

左上角。我什至根本没有碰过那一行。

我怀疑它膨胀了速度,所以我使用了 SparseIntArray,删除另一个视图,为测试制作小数组,删除视图上的资源。但一切都一文不值。

SparseIntArray 中的结果也和预期的一样正常。

下面是一些代码。此外,所有 xml 都是

页面宽度

public float getPageWidth(int position)
    {
        if(position != 3 && position != 0)
        {
            return 0.15f;
        }
        else
        {
            return 1f;
        }
    }

初始化和加载

@Override
    public void onBindViewHolder(@NonNull mAdapter.ClipViewHolder clipViewHolder, int position)
    {
        if(stateArray.get(position) > 0 && stateArray.get(position) <= 4)
        {
            clipViewHolder.myPager.setCurrentItem(stateArray.get(position) - 1);
        }
        else
        {
            clipViewHolder.myPager.setCurrentItem(3);
            stateArray.append(position, clipViewHolder.myPager.getCurrentItem() + 1);
        }
    }

保存

@Override
    public void onViewRecycled(@NonNull ClipViewHolder holder)
    {
        stateArray.put(holder.getAdapterPosition(), holder.myPager.getCurrentItem() + 1);
        super.onViewRecycled(holder);
    }

无论滑动状态如何,无论滚动速度有多快,我都想流畅地显示它们。有什么解决办法吗?

【问题讨论】:

    标签: android android-recyclerview android-viewpager


    【解决方案1】:
    //Put below code in XML file    
    <android.support.v4.widget.NestedScrollView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
      <android.support.v7.widget.RecyclerView
       android:id="@+id/recycleView"
       android:nestedScrollingEnabled="false"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
    />
    
    // put below lines in your activity as
    /* catche memory */
    recyclerView.setItemViewCacheSize(200);
    recyclerView.setDrawingCacheEnabled(true);
    recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    
    RecyclerView.LayoutManager mLayoutManager = new 
       LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    
    //for smooth recycler
    recyclerView.setNestedScrollingEnabled(false);  // Main Line
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.smoothScrollBy(0, 10);
    

    【讨论】:

    • 对于像上面这样的发现,我用 NestedScrollView 部分包围了我的 recyclerview 代码。 (不制作新的)也只需添加 setNestedScrollingEnabled (代码中的单行)。它就像一个魅力。说真的,它有很大帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多