RecyclerView在NestedScrollView/LinearLayout中卡顿问题

4

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

  1. 如何在NestedScrollView中使用RecyclerView?
  2. NestedScrollView中的RecyclerView滚动但不像普通的RecyclerView或NestedScrollView那样快速滚动
  3. ScrollView / NestedScrollView中的RecyclerView无法正确滚动

以上问题都没有解决我的问题。当滚动时,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); }

基本上,无论如何,在RecyclerView中使用“wrap_content”总会存在过多资源的风险。 - Ben P.
我已经尝试设置高度,但并没有真正帮助。 - Jaeger
1个回答

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接