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

Xamarin.Forms SharedTransitions插件集成后导航返回异常如何解决?

问题成因

该异常由SharedTransitions插件Android端原生渲染器的已知缺陷触发:

  • 旧版本插件的SharedTransitionPageRenderer未实现Xamarin.Android要求的(IntPtr, JniHandleOwnership)构造函数,当Shell返回导航触发页面实例回收重建、系统需要从native句柄恢复托管渲染器实例时,找不到对应构造函数就会抛出MissingMethodException,进而连锁触发NotSupportedException和JavaLocationException
  • Shell的返回导航逻辑会复用页面栈上下文,比传统NavigationPage导航更容易命中渲染器实例回收重建的场景,所以仅集成基础Shell功能就会触发异常
排查步骤
  • 确认当前使用的SharedTransitions插件版本,低于2.2.0的版本均存在该构造函数缺失问题
  • 验证Android项目的目标框架版本是否不低于Android 10.0 (API 29),低版本API和新版插件的兼容性问题也会触发同类异常
  • 临时注释SharedTransitionAppShell的注册逻辑,改用默认AppShell测试返回导航功能,确认异常确实由插件集成导致
解决方案
  • 优先升级SharedTransitions插件到2.2.0及以上的最新稳定版,官方已在该版本修复了渲染器构造函数缺失的问题
  • 若因项目依赖限制无法升级插件,可在Android项目中新增自定义渲染器,手动补充缺失的构造函数:
using Android.Runtime;
using Plugin.SharedTransitions.Platforms.Android;
using Xamarin.Forms;

// 若项目使用了FlyoutPage、TabbedPage等其他页面类型,需针对对应页面类型单独注册渲染器
[assembly: ExportRenderer(typeof(ContentPage), typeof(YourAppNamespace.Droid.CustomSharedTransitionPageRenderer))]
namespace YourAppNamespace.Droid
{
    public class CustomSharedTransitionPageRenderer : SharedTransitionPageRenderer
    {
        public CustomSharedTransitionPageRenderer(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership)
        {
        }
    }
}
  • 若以上方案均无效,检查导航逻辑是否混用了INavigation.PopAsync()和Shell的GoToAsync("..")两种返回方法,统一使用Shell自带的导航方法即可。

内容的提问来源于stack exchange,提问作者Brett Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:07