Android 当快速滚动时,如何修复recyclerview中viewpager的意外行为?

Android 当快速滚动时,如何修复recyclerview中viewpager的意外行为?,android,android-recyclerview,android-viewpager,Android,Android Recyclerview,Android Viewpager,我的RecyclerView在每一行都有一个viewpager,用于几个可切换按钮 当我在默认状态下快速滚动时,它工作正常 但某些视图(页面)部分显示在默认页面上。我可以看到他们从以前的刷过的页面被刷到默认页面(实际上不是他们的。上面循环使用的单行) 有时,很小的“局部视图”出现在拐角处,即使它们被设置为默认值,如下所示 左上角。我甚至连那一排都没碰 我怀疑它的速度过快,所以我使用SparseIntArray,删除另一个视图,为测试制作小数组,删除视图上的资源。但一切都一文不值 此外,Spars

我的RecyclerView在每一行都有一个viewpager,用于几个可切换按钮

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

但某些视图(页面)部分显示在默认页面上。我可以看到他们从以前的刷过的页面被刷到默认页面(实际上不是他们的。上面循环使用的单行)

有时,很小的“局部视图”出现在拐角处,即使它们被设置为默认值,如下所示

左上角。我甚至连那一排都没碰

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

此外,SparseIntArray的结果与预期一样正常

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

页面宽度

public float getPageWidth(int位置)
{
如果(位置!=3&&position!=0)
{
返回0.15f;
}
其他的
{
返回1f;
}
}
初始化和加载

@覆盖
public void onBindViewHolder(@NonNull mAdapter.ClipViewHolder ClipViewHolder,int位置)
{
if(stateArray.get(position)>0&&stateArray.get(position)
//将下面的代码放入XML文件中
/>
//在活动的下面几行写上
/*捕捉记忆*/
recyclerView.setItemViewCacheSize(200);
recyclerView.setDrawingCacheEnabled(真);
recyclerView.setDrawingCacheQuality(视图.图形缓存质量高);
RecyclerView.LayoutManager mLayoutManager=新建
LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
//为顺利回收
recyclerView.setNestedScrollingEnabled(false);//主线
setItemAnimator(新的DefaultItemAnimator());
recyclerView.smoothScrollBy(0,10);

对于那些找到类似上述内容的人,我用NestedScrollView部件围绕我的recyclerview代码(不制作新部件),也只需添加setNestedScrollingEnabled(代码中的单行)。它就像一个符咒。说真的,它帮助很大。谢谢。
//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);