NestedScrollView嵌套RecyclerView出现onBindViewHolder一直回调的问题

在CoordinatorLayout中,当NestedScrollView内嵌RecyclerView时,可能出现onBindViewHolder回调次数过多的问题。在初始加载且不滑动情况下,回调次数达到数据条数的全部,如860次,可能导致应用崩溃。2016年11月20日补充,RecyclerView的LayoutManager使用WRAP_CONTENT时,会影响测量方式,决定是否由RecyclerView自身进行布局测量。
摘要由CSDN通过智能技术生成

CoordinatorLayout中NestedScrollView嵌套RecyclerView出现onBindViewHolder的回调问题:
假设数据有860条,在初始化后显示一屏不滑动,onBindViewHolder 回调12次,
而嵌套了则在初始化后不滑动的情况下会回调860次,APP崩了。。。

2016年11月20日01:18:06补充

//设置 这个可以避免以上问题    但也意味着失去了本身设计用来提供支持WRAP_CONTENT的功能了
mRecyclerView.getLayoutManager().setAutoMeasureEnabled(false);

api要点:

1、This method is usually called by the LayoutManager with value true if it wants to support WRAP_CONTENT.

通常调用这个方法设置值为true的时候 就是用来支持WRAP_CONTENT功能的。。。

2、 True if the Layout should be measured by the RecyclerView, false if the LayoutManager wants to measure itself.

true 代表把布局交由recycleview测量 false 代表LayoutManager 自己测量

api 24.2.1

public void setAutoMeasureEnabled(boolean enabled)
Defines whether the layout should be measured by the RecyclerView or the LayoutManager wants to handle the layout measurements itself.
This method is usually called by the LayoutManager with value true if it wants to support WRAP_CONTENT. If you are using a public LayoutManager but want to customize the measurement logic, you can call this method with false and override LayoutMana
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 嵌套ScrollViewRecyclerView时,可以使用NestedScrollView来解决滑动冲突的问题NestedScrollView是Android 5.引入的一个新控件,它可以嵌套其他可滑动的控件,如RecyclerView、ListView等。在嵌套时,需要在RecyclerView的外层包裹一个NestedScrollView,并在NestedScrollView中设置app:layout_behavior="@string/appbar_scrolling_view_behavior"属性,以便与AppBarLayout联动。同时,需要在RecyclerView中设置android:nestedScrollingEnabled="false"属性,以禁止RecyclerView自身的滑动事件。这样就可以实现NestedScrollView嵌套RecyclerView的效果了。 ### 回答2: NestedScrollView是一个可以嵌套滚动的视图容器,可以方便地实现嵌套滚动的效果。而RecyclerView是一个能够高效地维护大量数据的控件,它可以展示大数据集合,并且拥有灵活的布局以及可定制性。因此,嵌套ScrollViewRecyclerView的需求是非常普遍的。 在使用NestedScrollView嵌套RecyclerView的时候,需要注意以下几个问题: 1.布局的设置 嵌套布局时需要设置正确的布局层级,例如可以将NestedScrollView作为父布局,让它的孩子是RecyclerView。 2.增加嵌套滑动事件 NestedScrollView默认不具备嵌套滑动事件,因此需要在RecyclerView中增加相应的滑动事件来实现嵌套滑动。 3.优化RecyclerView性能 在RecyclerView中可能会存在大量的数据,因此需要做一些性能优化。例如可以使用ViewHolder来重用子视图,使用LayoutManager来管理子视图的布局等等。 4.合理设置RecyclerView高度 由于RecyclerView的高度需要根据具体情况来设置,因此需要根据每个item的高度来设置RecyclerView的高度,否则可能会出现一些问题。 综上所述,NestedScrollView嵌套RecyclerView需要考虑的问题比较多,需要开发者综合考虑各种情况来尽可能达到良好的用户体验和流畅的界面效果。 ### 回答3: NestedScrollView嵌套RecyclerView是常见的布局方式,可以应用在需要列表上下滑动,同时支持整个界面上下滑动的情况下。 NestedScrollView是Android 5.0之后提供的用于嵌套滑动的控件,它继承自ScrollView,但比ScrollView功能更强大,可以实现更复杂的嵌套滑动效果。而RecyclerView是Android系统提供的一个列表控件,比ListView具有更好的性能和灵活性。 在嵌套RecyclerView时,我们需要先将RecyclerView的滑动事件交给外层的NestedScrollView来处理,这可以通过给RecyclerView设置一个OnTouchListener来实现。 同时,在NestedScrollView中,我们可以设置子view这个属性app:layout_behavior="@string/appbar_scrolling_view_behaviour",也就是将NestedScrollView的滑动事件交给外层的AppBarLayout来处理。 在使用上,我们需要了解两个重要的方法:onNestedPreScroll和onNestedPreFling。这两个方法分别用于处理子view传递过来的滑动事件,我们需要在这两个方法中做出相应处理,从而实现NestedScrollView内部RecyclerView与外部AppBarLayout的联动效果。 另外,为了保证RecyclerView能够完全显示出来,我们还需要在RecyclerView的外层布局中设置android:layout_height="wrap_content"属性。 综上所述,NestedScrollView嵌套RecyclerView需要注意以下几点:将RecyclerView的滑动事件交给外层的NestedScrollView处理;设置子viewapp:layout_behavior;重写onNestedPreScroll和onNestedPreFling方法;设置RecyclerView的外层布局高度为wrap_content。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值