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

自定义BottomSheet继承CoordinatorLayout遇VTable初始化失败求助

问题解决:自定义BottomSheet继承Support库CoordinatorLayout触发AndroidX类型加载异常

异常原因

你遇到的System.TypeLoadException本质是项目中混合了Android Support库与AndroidX库,导致类型加载冲突。即使代码显式继承自Android.Support.Design.Widget.CoordinatorLayout,但项目中其他依赖(比如你使用的AnchoredBottomSheetBehavior)或NuGet包可能间接引用了AndroidX版本的CoordinatorLayout,运行时CLR无法正确区分两个版本的类型,从而触发VTable初始化失败。

解决方案

1. 完全迁移到AndroidX库

Xamarin已停止维护Android Support库,混合使用必然出现兼容性问题,需统一替换为AndroidX对应库:

  • 移除所有以Android.Support.开头的NuGet包
  • 添加以下AndroidX替代包:
    • Xamarin.AndroidX.Material(对应原Support.Design)
    • Xamarin.AndroidX.Core(对应原Support.V4)
    • Xamarin.AndroidX.CoordinatorLayout

2. 修改代码命名空间引用

将代码中所有Support库的命名空间替换为AndroidX版本:

// 替换前
using Android.Support.Design.Widget;
using Android.Support.V4.Widget;

// 替换后
using AndroidX.CoordinatorLayout.Widget;
using AndroidX.Core.Widget;

同时确认AnchoredBottomSheetBehavior的实现也基于AndroidX库的类,比如它应该继承自AndroidX.CoordinatorLayout.Widget.CoordinatorLayout.Behavior而非Support版本。

3. 清理并重建项目

  • 右键项目 → 选择「清理」
  • 删除项目目录下的bin和obj文件夹
  • 重新还原NuGet包(右键项目 → 「还原NuGet包」)
  • 重新构建项目

修正后的部分代码示例

using System;
using Android.Content;
using Android.Graphics;
using Android.Runtime;
using AndroidX.CoordinatorLayout.Widget;
using AndroidX.Core.Widget;
using Android.Util;
using Android.Views;
using Android.Widget;
using XBottomSheet.Droid.Behaviors;

namespace XBottomSheet.Droid.Views
{
    public class XBottomSheetView : CoordinatorLayout
    {
        private AnchoredBottomSheetBehavior behavior;
        private NestedScrollView contentScroller;

        // 其余属性、构造函数、方法保持不变,仅命名空间替换
        #region Properties
        public int PeekHeight
        {
            get
            {
                return behavior.PeekHeight;
            }
            set
            {
                behavior.PeekHeight = value;
            }
        }

        // 其他属性...
        #endregion

        #region Constructors
        public XBottomSheetView(Context context) : base(context) {}

        public XBottomSheetView(Context context, IAttributeSet attrs) : base(context, attrs)
        {
            behavior = new AnchoredBottomSheetBehavior(context, attrs);
            
            contentScroller = new NestedScrollView(context);
            contentScroller.SetBackgroundColor(Color.LightGray);
            ContentView = new FrameLayout(context);
        }

        // 其他构造函数...
        #endregion

        public void AddStateChangedEvent(EventHandler onStateChanged)
        {
            behavior.StateChanged += onStateChanged;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:37