Skip to content

Commit 8baafac

Browse files
mfazekasclaude
andcommitted
fix(android): bind to artboard and play after binding changes
- Add artboard.viewModelInstance binding in addition to stateMachine - Add view.play() call after all binding mode changes - Matches iOS implementation for consistent behavior - Ensures visual updates appear when switching modes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent ff931d6 commit 8baafac

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,35 +115,41 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
115115
private fun configureDataBinding() {
116116
executeOnUiThread {
117117
val stateMachines = view.riveAnimationView?.controller?.stateMachines
118+
val artboard = view.riveAnimationView?.controller?.activeArtboard
118119
if (stateMachines.isNullOrEmpty()) return@executeOnUiThread
119120

120121
when (dataBind) {
121122
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.First -> {
122123
val instance = (dataBind.asFirstOrNull() as? HybridViewModelInstance)?.viewModelInstance
123124
instance?.let {
125+
artboard?.viewModelInstance = it
124126
stateMachines.first().viewModelInstance = it
127+
view.play()
125128
}
126129
}
127130
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Second -> {
128131
when (dataBind.asSecondOrNull()) {
129132
DataBindMode.AUTO -> {
130133
// Auto-binding requires reload
134+
view.play()
131135
}
132136
DataBindMode.NONE -> {
133137
// No binding
138+
view.play()
134139
}
135140
else -> {}
136141
}
137142
}
138143
is Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.Third -> {
139144
val name = dataBind.asThirdOrNull()?.byName
140145
name?.let {
141-
val artboard = view.riveAnimationView?.controller?.activeArtboard
142146
val file = view.riveAnimationView?.controller?.file
143147
if (artboard != null && file != null) {
144148
val viewModel = file.defaultViewModelForArtboard(artboard)
145149
val instance = viewModel.createInstanceFromName(it)
150+
artboard.viewModelInstance = instance
146151
stateMachines.first().viewModelInstance = instance
152+
view.play()
147153
}
148154
}
149155
}

0 commit comments

Comments
 (0)