Xamarin Android ViewRenderer<редактор, TextInputLayout> ctor выбрасывает нулевую ссылку

tl;dr: CustomRenderer с ViewRenderer < Entry, TextInputLayout> работает, CustomRenderer с ViewRenderer < Editor, TextInputLayout> не работает.

Я создал EditText с плавающими надписями через CustomRenderer: пример дизайна Android

Рендеринг с начальным классом:

PCL:

public class MyFloatEntry : Entry { /*...*/ }

Android-проект:

[assembly: ExportRenderer(typeof(MyFloatEntry), typeof(MyFloatEntry_Droid))]
namespace MyProject.Droid.Renderer
{
    public class MyFloatEntry_Droid : ViewRenderer<MyFloatEntry, TextInputLayout>, ITextWatcher, TextView.IOnEditorActionListener
    {
        public MyFloatEntry_Droid(Context context) : base(context)
        {
            //[...]
        }
    }
}

    protected override void OnElementChanged(ElementChangedEventArgs<MyFloatEntry> e)
    {
        base.OnElementChanged(e);
        //[...]
    }
}

Это прекрасно работает, и я получил свою замечательную запись с плавающей подсказкой, используя TextInputLayout, предоставленный платформой Android.

Теперь я хотел сделать это и для редактора.

Рендеринг с начальным классом:

PCL:

public class MyFloatEditor : Editor{ /*...*/ }

Android-проект:

[assembly: ExportRenderer(typeof(MyFloatEditor), typeof(MyFloatEditor_Droid))]
namespace MyProject.Droid.Renderer
{
    public class MyFloatEditor_Droid : ViewRenderer<MyFloatEditor, TextInputLayout>, ITextWatcher, TextView.IOnEditorActionListener
    {
        public MyFloatEditor_Droid(Context context) : base(context) //throws "class not found"
        {
            //[...]
        }
    }
}

    protected override void OnElementChanged(ElementChangedEventArgs<MyFloatEditor> e)
    {
        base.OnElementChanged(e);
        //[...]
    }
}

Но это вызывает исключение нулевой ссылки в ctor. Я протестировал его с обоими ViewRenderers (appcompat, nonappcompat), с базовым ctor, ctor и сигнатурой контекста, тем не менее, он всегда выдает одну и ту же ошибку, показанную ниже:

Обнаружена ошибка JNI в приложении: JNI CallObjectMethodA вызван с ожидающим исключением android.runtime.JavaProxyThrowable: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> Java.Lang.ClassNotFoundException: не найден класс "md541a10de1a99b1e04dd7b48feb368a279.MyFloatEditor_Droid" по пути: DexPathList[[zip-файл "/data/app/MyProject.Android-1/base.apiesibDidiveDirectory,, data/app/MyProject.Android-1/lib/arm/system/fake-libs,/data/app/MyProject.Android-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] в Java.Interop.JniEnvironment+Types.FindClass(имя класса System.String)[0x00114] в <438784097c4b4b56a7da6ca9301bc3c6>:0

в Java.Interop.JniType..ctor(имя класса System.String) [0x00006] в <438784097c4b4b56a7da6ca9301bc3c6>:0 в Java. в Java.Interop. JniArgumentValue * параметры) [0x00032] в <438784097c4b4b56a7da6ca9301bc3c6>:0 в Xamarin.Forms.Platform.Android.FormsViewGroup..ctor(Android.Content.Context p0) [0x00046] в D:\agent_work\mar \ work.Platform.Android.FormsViewGroup\obj\Release\ генерируемый \src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:89 в Xamarin.Forms.Platform.Android.VisualElementRenderer 1[TElement]..ctor (Android.Content.Context context)[0x00012] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:30 at Xamarin.Forms.Platform.Android.ViewRenderer2 [TView, TNativeView].. ctor (контекст Android.Content.Context)[0x00000] в D:\agent_work\1\s\Xamarin.Forms.Platform.Android\ViewRenderer.cs:25 в Xamarin.Forms.Platform.Android.AppCompat.ViewRenderer`2[TView, TControl]..ctor (контекст Android.Content.Context)[0x00000] в D:\agent_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\ViewRenderer.cs:8 в MyProject.Droid.Renderer.MyFloatEditor_Droid..ctor(Xamarin.Forms.Platform.Android.FormsAppCompatActivity context) [0x00000] в D: \ Рабочих пространствах \HelloWorld\HelloWorld.MyProject\MyProject\MyProject\MyProloDerer_Droid.cs: ​​41 at(управляемая оболочка к собственной) System.Reflection.MonoCMethod:InternalInvoke(System.Reflection.MonoCMethod, объект, объект [], System.Exception&) в System.Reflection.MonoCMethod.InternalInvoke(System.Object obj, Параметры System.Object[]) [0x00002] в <657aa8fea4454dc898a9e5f379c58734>:0

0 ответов

Другие вопросы по тегам