使用Motion Layout触发空指针错误:Attempt to invoke virtual method...null object reference
解决Motion Layout空指针错误:
Attempt to invoke virtual method 'int androidx.constraintlayout.motion.widget.MotionScene$Transition.getStartConstraintSetId()' on a null object reference 错误详情
触发空指针异常,原因是代码尝试调用
MotionScene$Transition.getStartConstraintSetId()方法时,对应的Transition对象为null。
常见修复方案
- 检查MotionScene配置:确认
motion_scene.xml中已正确定义Transition,且startConstraintSet、endConstraintSet引用的约束集ID在布局中存在。正确配置示例:<Transition android:id="@+id/anim_transition" app:constraintSetStart="@id/start_state" app:constraintSetEnd="@id/end_state"> <!-- 动画时长、插值器等配置 --> </Transition> <ConstraintSet android:id="@+id/start_state"> <!-- 起始状态的控件约束 --> </ConstraintSet> <ConstraintSet android:id="@+id/end_state"> <!-- 结束状态的控件约束 --> </ConstraintSet> - 确保MotionScene正确绑定:代码中加载MotionScene后,获取Transition前需判空,避免直接访问未初始化的对象。示例代码:
val motionLayout = findViewById<MotionLayout>(R.id.main_motion_layout) val motionScene = MotionScene(motionLayout.context, R.xml.motion_scene) motionLayout.setScene(motionScene) val targetTransition = motionScene.getTransition(R.id.anim_transition) targetTransition?.run { // 执行Transition相关操作 } - 核对ID引用正确性:检查布局中MotionLayout的ID、MotionScene里的Transition和ConstraintSet ID是否存在拼写错误,确保引用一致。
- 统一依赖版本:保证
constraintlayout与constraintlayout-motion版本匹配,建议使用最新稳定版:implementation "androidx.constraintlayout:constraintlayout:2.1.4" implementation "androidx.constraintlayout:constraintlayout-motion:2.1.4"
内容的提问来源于stack exchange,提问作者Aditya Cheke
相关产品推荐
相关产品推荐

