RecyclerView常见问题

1、数据不显示,看源码

void dispatchLayout() {
        if (mAdapter == null) {
            Log.e(TAG, "No adapter attached; skipping layout");
            // leave the state in START
            return;
        }
        if (mLayout == null) {
            Log.e(TAG, "No layout manager attached; skipping layout");
            // leave the state in START
            return;
        }
        mState.mIsMeasuring = false;
        if (mState.mLayoutStep == State.STEP_START) {
            dispatchLayoutStep1();
            mLayout.setExactMeasureSpecsFrom(this);
            dispatchLayoutStep2();
        } else if (mAdapterHelper.hasUpdates() || mLayout.getWidth() != getWidth()
                || mLayout.getHeight() != getHeight()) {
            // First 2 steps are done in onMeasure but looks like we have to run again due to
            // changed size.
            mLayout.setExactMeasureSpecsFrom(this);
            dispatchLayoutStep2();
        } else {
            // always make sure we sync them (to ensure mode is exact)
            mLayout.setExactMeasureSpecsFrom(this);
        }
        dispatchLayoutStep3();
    }
复制代码

再有数据的情况下,应该是适配器为空或者没有设备LayoutManager

2、recyclerview嵌套CheckBox加载混乱问题

https://juejin.im/post/5c453fe8e51d4551cc6e2ccd

3、滚动到指定位置

smoothScrollToPosition();
复制代码

4、计算recyclerview高度

数据渲染成功之前recyclerview.getMeasuredHeight()得到的必然是0(其他的控件在onCreate执行的时候得到的必然也是0)

方法一:

recyclerview.measure(0, 0);
recyclerview.getMeasuredHeight()
复制代码

方法二:

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
		viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
			@Override
			public void onGlobalLayout() {
				view.getHeight();
				view.getWidth();
			}
		});
复制代码

ViewTreeObserver是用来监听视图树变化的监听器,亦可以 View.getViewTreeObserver()来实现,想要取消监听可以通过移除方法实现

view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
复制代码

5.scrollview嵌套recyclerview显示不全

给recyclerview嵌套一个外布局LinearLayout或者RelativeLayout,设置属性

android:descendantFocusability="blocksDescendants"
复制代码

转载于:https://juejin.im/post/5c516ab25188251ec0718ac8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值