nestedscrollview(以及 scrollview)要求其 xml 布局中必须且只能有一个直接子 view,否则会抛出 illegalstateexception: scrollview can host only one direct child。解决方法是将所有内容包裹在一个单一容器(如 linearlayout 或 constraintlayout)内,再作为 nestedscrollview 的唯一子节点。
该错误的根本原因在于:NestedScrollView 继承自 FrameLayout,其内部实现严格限制仅允许一个直接子视图(addView() 时校验)。而你在原始 XML 中将多个独立 View(如
并列置于
✅ 正确写法:所有内容必须嵌套在同一个根布局容器中,例如:
⚠️ 注意事项:
总结:“One Child Rule” 是 ScrollView 系控件的硬性契约。始终以「单容器包裹多内容」为布局范式,即可彻底规避此异常,并保障嵌套滚动逻辑稳定运行。