快速滚动时如何修复 recyclerview 中 viewpager 的意外行为?
How to fix unexpected behavior on viewpager in recyclerview when fast scrolling?
我的 RecyclerView 在每一行都有几个可滑动按钮的 viewpager。
当我在默认状态下快速滚动时,它工作正常。
但有些视图(页面)在默认页面上部分显示。我可以看到他们从之前刷过的页面刷到默认页面(实际上不是他们的。上面回收的单行)
有时会出现非常小的 'partial view' 角落,即使它们被设置为默认值,如下所示。
左上角。我什至没有碰那一行。
我怀疑它的膨胀速度,所以我使用了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);
}
无论滑动状态如何,无论滚动速度多快,我都想流畅地显示它们。有什么解决办法吗?
//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);
我的 RecyclerView 在每一行都有几个可滑动按钮的 viewpager。
当我在默认状态下快速滚动时,它工作正常。
但有些视图(页面)在默认页面上部分显示。我可以看到他们从之前刷过的页面刷到默认页面(实际上不是他们的。上面回收的单行)
有时会出现非常小的 'partial view' 角落,即使它们被设置为默认值,如下所示。
我怀疑它的膨胀速度,所以我使用了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);
}
无论滑动状态如何,无论滚动速度多快,我都想流畅地显示它们。有什么解决办法吗?
//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);