RecyclerView Laggy внутри NestedScrollView / LinearLayout

Прежде чем копаться в коде, я уже проверил следующие вопросы:

  1. Как использовать RecyclerView внутри NestedScrollView?
  2. Повторный просмотр внутри прокрутки вложенного прокрутки, но не быстрая прокрутка, как в обычном Recyclerview или Nested Scrollview
  3. RecyclerView внутри ScrollView / NestedScrollView не прокручивается должным образом

Ни один из вышеупомянутых вопросов не помог мне. RecyclerView слишком тормозит при прокрутке.

У меня есть NestedScrollview и LinearLayout в качестве основного макета для NestedScrollview. Код макета:

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    >

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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); }

person Jaeger    schedule 04.07.2018    source источник
comment
По сути, несмотря ни на что, использование wrap_content с RecyclerView всегда сопряжено с риском использования слишком большого количества ресурсов.   -  person Ben P.    schedule 04.07.2018
comment
Я пробовал установить высоту, но это не помогло.   -  person Jaeger    schedule 04.07.2018


Ответы (1)


Поскольку ваш RecyclerView горизонтальный, попробуйте сделать ширину RecyclerView «wrap_content».

person Shubhendra Singh    schedule 04.07.2018