RecyclerView Laggy 在 NestedScrollView/LinearLayout

Posted

技术标签:

【中文标题】RecyclerView Laggy 在 NestedScrollView/LinearLayout【英文标题】:RecyclerView Laggy inside NestedScrollView/LinearLayout 【发布时间】:2018-12-12 08:56:35 【问题描述】:

在深入研究代码之前,我已经检查了以下问题:

    How to use RecyclerView inside NestedScrollView? Recyclerview inside Nested Scrollview scroll but does not fast scroll like normal Recyclerview or Nested Scrollview RecyclerView inside a ScrollView/NestedScrollView does not scroll properly

上述问题都没有对我有用。 RecyclerView 滚动时太迟钝。

我有一个NestedScrollview 和一个LinearLayout 作为NestedScrollview 的主要布局。布局的代码是:

<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
xmlns:fbutton="http://schemas.android.com/apk/res-auto"
>

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:gravity="center"
    >

<android.support.v7.widget.RecyclerView
        android:layout_
        android:layout_
        android:layout_marginTop="@dimen/frag_misc_rv_margin_top"
        android:scrollbars="none"
        android:nestedScrollingEnabled="false"
        android:id="@+id/frag_showcase_promotion_recyclerview"/>

    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

代码是:

mPromotionsRv.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false));
mPromotionsRv.setNestedScrollingEnabled(false);
mPromotionsAdapter = new ShowcasePromotionRvAdapter(getActivity(), mPromotionsItems);
mPromotionsAdapter.setOnItemClickListener(new ShowcasePromotionListener() 
        @Override
        public void onClick(View view, int position) 
            ItemPromotion mPromotion = mPromotionsItems.get(position);
            try
                recordPromotionClick(mPromotion.getId());
                view.getContext().startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(mPromotion.getPromotion_link())));
             catch (Exception e)
                e.printStackTrace();
            
        
    );

    mPromotionsRv.setAdapter(mPromotionsAdapter);
    SnapHelper snapHelperStart = new GravitySnapHelper(Gravity.START);
    snapHelperStart.attachToRecyclerView(mPromotionsRv);


    RecyclerView.ItemAnimator animator = mPromotionsRv.getItemAnimator();
    if (animator instanceof SimpleItemAnimator)  ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false); 

【问题讨论】:

基本上无论如何,使用wrap_contentRecyclerView 总是会冒使用太多资源的风险。 我试过设置高度,但一点帮助都没有。 【参考方案1】:

由于您的 RecyclerView 是水平的,请尝试使您的 RecyclerView 的宽度为“wrap_content”。

【讨论】:

以上是关于RecyclerView Laggy 在 NestedScrollView/LinearLayout的主要内容,如果未能解决你的问题,请参考以下文章

Laggy css:在最新版本的 Chrome 上悬停过渡

当在nestedscrollview的recyclerview中将项目拖出可见空间时-nestedscrollView不滚动

NEST Api SearchAfter 在 NEST 中返回 null 但在 Kibana 中有效

在 nest.js 中处理第三方依赖项

Nest.js 在单元测试中无法解析 Mongoose 模型依赖

Nest.js 获取注入器实例