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"
复制代码