You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin多视图场景下ActivityOptions.makeSceneTransitionAnimation调用报错:参数不匹配

Fixing Activity Transition Animation Issues in Kotlin

Hey there! Let's work through this Activity transition issue you're hitting—this is a pretty common snag when dealing with shared element transitions in Kotlin, so let's break it down step by step.

First: Fixing the "No matching function" Error/Warning

That error almost always comes from using the wrong overload of ActivityOptions.makeSceneTransitionAnimation() or mixing up parameter order. Let's clarify the valid overloads:

1. Single Shared Element

This takes the current Activity, the shared View, and its matching transition name:

val options = ActivityOptions.makeSceneTransitionAnimation(
    this, // Current Activity instance
    findViewById<View>(R.id.your_shared_view), // The View to transition
    "unique_transition_name" // Must match the target Activity's View transition name
)

Common mistake here: Swapping the View and transition name parameters—double-check their order!

2. Multiple Shared Elements

For multiple views, use the vararg overload that accepts pairs of (View, transitionName). In Kotlin, you can pass these pairs directly, or wrap them in an array and expand it with *:

// Option 1: Pass pairs directly
val options = ActivityOptions.makeSceneTransitionAnimation(
    this,
    Pair(findViewById<View>(R.id.view1), "transition_name_1"),
    Pair(findViewById<View>(R.id.view2), "transition_name_2")
)

// Option 2: Use an array and expand it
val sharedElementPairs = arrayOf(
    Pair(findViewById<View>(R.id.view1), "transition_name_1"),
    Pair(findViewById<View>(R.id.view2), "transition_name_2")
)
val options = ActivityOptions.makeSceneTransitionAnimation(this, *sharedElementPairs)

Common mistake here: Passing a List instead of vararg pairs, or forgetting the * when expanding an array—Kotlin won't auto-convert Lists to vararg parameters.

Next: Fixing Multi-View Transition Failures

If the function call is correct but transitions still don't work for multiple views, check these critical points:

1. Match Transition Names Exactly

Every shared View in your source Activity must have an identical transitionName to its counterpart in the target Activity. You can set this in XML or code:

  • XML (source/target layout):
<ImageView
    android:id="@+id/view1"
    android:transitionName="transition_name_1"
    ... />
  • Code (dynamic views like RecyclerView items):
yourView.transitionName = "unique_transition_name_for_this_item"

2. Enable Window Transitions in Your Theme

Shared element transitions won't work unless you've enabled window content transitions in your app theme. Add this to your styles.xml:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="android:windowContentTransitions">true</item>
    <!-- Optional: Define specific transition types for better control -->
    <item name="android:windowSharedElementEnterTransition">@android:transition/change_bounds</item>
    <item name="android:windowSharedElementExitTransition">@android:transition/change_bounds</item>
</style>

3. Correctly Pass the Options Bundle

Don't forget to attach the options bundle when starting the target Activity:

startActivity(yourIntent, options.toBundle())

4. Avoid Premature Activity Finishing

If you call finish() right after startActivity(), the transition might get skipped—wait until the transition completes if you need to finish the source Activity.

5. Ensure Views Are Attached & Visible

Shared elements must be attached to the view hierarchy and visible on the screen when you trigger the transition. For dynamic views (like RecyclerView items), make sure the item is fully loaded and visible before starting the transition.

Quick Troubleshooting Checklist

  • Double-check parameter order in makeSceneTransitionAnimation()
  • Verify all shared elements have matching transitionName values
  • Confirm window transitions are enabled in your theme
  • Ensure you're passing options.toBundle() to startActivity()
  • Make sure shared views are visible and attached to the hierarchy when triggering the transition

内容的提问来源于stack exchange,提问作者Kishan Solanki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:59:45