3 votes

RecyclerView Laggy dans NestedScrollView/LinearLayout

Avant de creuser dans le code, j'ai déjà vérifié les questions suivantes :

  1. Comment utiliser RecyclerView dans NestedScrollView ?
  2. Une vue recyclée dans une vue défilante imbriquée défile mais ne défile pas rapidement comme une vue recyclée ou une vue défilante imbriquée normale.
  3. RecyclerView à l'intérieur d'un ScrollView/NestedScrollView ne défile pas correctement

Aucune des questions susmentionnées n'a fonctionné avec moi. Le site RecyclerView est trop lent lors du défilement.

J'ai un NestedScrollview et un LinearLayout comme une mise en page principale pour le NestedScrollview . Le code de la mise en page est :

<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>

Le code est :

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

0voto

Shubhendra Singh Points 366

Puisque votre RecyclerView est horizontale, essayez de donner à la largeur de votre RecyclerView la valeur "wrap_content".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X