Avant de creuser dans le code, j'ai déjà vérifié les questions suivantes :
- Comment utiliser RecyclerView dans NestedScrollView ?
- 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.
- 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); }