快速滚动时,如何解决recyclerview中viewpager上的意外行为?

时间:2019-05-07 08:51:48

标签: android android-recyclerview android-viewpager

我的RecyclerView每行都有viewpager,其中包含多个可滑动按钮。

在默认状态下快速滚动时,效果很好。

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

有时候,即使将它们设置为如下默认值,也会出现很小的“局部视图”。

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

我怀疑它的速度过快,因此我使用了SparseIntArray,删除了另一个视图,为测试制作了小数组,删除了视图上的资源。但是所有的东西一文不值。

SparseIntArray中的结果也一切正常。

以下是一些代码。另外,所有xml都是

PageWidth

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);
    }

无论滚动状态如何,无论滚动速度有多快,我都希望向他们流畅显示。有什么解决办法吗?

1 个答案:

答案 0 :(得分: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);