Xamarin Android和自定义控件:无法激活实例

时间:2019-04-24 09:07:29

标签: xamarin.forms xamarin.android visual-studio-2019

我正在为标签编辑创建自定义控件。我正在使用Visual Studio 2019Xamarin Forms。它适用于UWPiOS,但是在Android中,本机渲染器出错。

Error

  

System.NotSupportedException:无法从本机句柄0x7feca76624(key_handle 0x95e8e41)激活Xamarin.Forms.Platform.Android.EntryRenderer类型的实例。

输出为:

  

04-24 10:10:11.382 W / InputMethodManager(17644):startInputReason = 4   04-24 10:10:11.415 I / HwSecImmHelper(17644):   mSecurityInputMethodService为空04-24 10:10:11.446   W / ResourceType(17644):获取名称时没有包标识符   资源编号0x00000000 04-24 10:10:11.448 W / View(17644):   dispatchProvideAutofillStructure():未布置,忽略04-24   10:10:11.453 I / AssistStructure(17644):扁平化的最终辅助数据:   2444字节,包含1个窗口,10个视图04-24 10:10:12.379   I / zygote64(17644):执行部分代码缓存收集,代码= 61KB,   数据= 54KB 04-24 10:10:12.379 I / zygote64(17644):代码缓存后   收集,代码= 61KB,数据= 54KB 04-24 10:10:12.379 I / zygote64(17644):   将代码缓存容量增加到256KB 04-24 10:10:14.160   W / zygote64(17644):JNI RegisterNativeMethods:尝试注册0   md58432a647068b097f9637064b8985a5e0.FrameRenderer的本机方法   04-24 10:10:14.220 W / InputMethodManager(17644):startInputReason = 4   04-24 10:10:14.259 W / InputMethodManager(17644):startInputReason = 4   04-24 10:10:14.260 I / zygote64(17644):编译器将5MB分配给   编译void android.view.View。((android.content.Context,   android.util.AttributeSet,int,int)04-24 10:10:14.263   W / InputMethodManager(17644):startInputReason = 3 04-24 10:10:14.284   I / HwSecImmHelper(17644):mSecurityInputMethodService为空04-24   10:10:14.379 I / zygote64(17644):执行完整的代码缓存收集,   代码= 108KB,数据= 98KB 04-24 10:10:14.380 I / zygote64(17644):在代码之后   缓存集合,代码= 101KB,数据= 74KB 04-24 10:10:14.568 D / Mono
  (17644):正在加载Mono.Android.dll asmctx DEFAULT的参考6,   寻找System.Runtime.Serialization,版本= 2.0.5.0,   文化=中性,PublicKeyToken = 7cec85d7bea7798e 04-24 10:10:14.570   D /单声道(17644):图像添加参考   System.Runtime.Serialization [0x7e53d21780](默认为asmctx)->   System.Runtime.Serialization.dll [0x7e51894800]:2mono_pe_file_map:   打开文件System.Runtime.Serialization.dll(3)时出错:没有这样的文件   或目录

     

04-24 10:10:14.570 D / Mono(17644):准备设置组件   'System.Runtime.Serialization'(System.Runtime.Serialization.dll)   04-24 24:10:14.570 D / Mono(17644):组装   System.Runtime.Serialization [0x7e53d21780]已添加到域RootDomain,   ref_count = 1 04-24 10:10:14.572 D / Mono(17644):AOT:图片   找不到“ System.Runtime.Serialization.dll.so”:dlopen失败:   找不到库“ System.Runtime.Serialization.dll.so” 04-24   10:10:14.572 D /单声道(17644):AOT:图片   '/ Users / builder / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / external / mono / sdks / out / android-arm64-v8a-release / lib / mono / aot-cache / arm64 / System。找不到Runtime.Serialization.dll.so:dlopen失败:库   “ / Users / builder / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / external / mono / sdks / out / android-arm64-v8a-release / lib / mono / aot-cache / arm64 / System。找不到“ Runtime.Serialization.dll.so” 04-24 10:10:14.572 D / Mono(17644):配置尝试   解析:“ System.Runtime.Serialization.dll.config”。 04-24 10:10:14.572   D / Mono(17644):配置尝试解析:   '/Users/builder/jenkins/workspace/xamarin-android-d16-0/xamarin-android/external/mono/sdks/out/android-arm64-v8a-release/etc/mono/assemblies/System.Runtime.Serialization/ System.Runtime.Serialization.config”。   04-24 10:10:14.572 D / Mono(17644):程序集引用addref   Mono.Android [0x7e56659a80]->   System.Runtime.Serialization [0x7e53d21780]:2 04-24 10:10:14.573   D / Mono(17644):正在加载参考0,共0   System.Runtime.Serialization.dll asmctx DEFAULT,寻找mscorlib,   版本= 2.0.5.0,文化=中性,PublicKeyToken = 7cec85d7bea7798e   04-24 10:10:14.573 D / Mono(17644):程序集参考addref   System.Runtime.Serialization [0x7e53d21780]-> mscorlib [0x7e77dc3c80]:   40加载的程序集:System.Runtime.Serialization.dll [外部]   未处理的异常:

     

System.NotSupportedException:无法激活类型的实例   来自本机句柄的Xamarin.Forms.Platform.Android.EntryRenderer   0x7feca76624(key_handle 0x95e8e41)。

该组件在Entry中为运行时添加了新的Layout<View>。 这也是我在Android中所期望的。

Result of TagEdit

我组件的完整源代码在Github上。重要的部分在这里:

public class TagEntryView : Layout<View>, IDisposable
{
    TagEntry TagEntry;

    public TagEntryView()
    {
        PropertyChanged += TagEntryViewPropertyChanged;
        PropertyChanging += TagEntryViewPropertyChanging;

        TagEntry = new TagEntry();
        TagEntry.TextChanged += TagEntryTextChanged;
        Children.Add(TagEntry);
    }

    void TagEntryTextChanged(object sender, TextChangedEventArgs e)
    {
        if (TagSeparators != null)
        {
            if (TagSeparators.Any(e.NewTextValue.Contains))
            {
                string tag = e.NewTextValue;
                foreach (var item in TagSeparators)
                {
                    tag = tag.Replace(item, string.Empty);
                }

                if (TagValidatorFactory != null)
                {
                    var tagBindingContext = TagValidatorFactory(tag);
                    var tagEntry = sender as Entry;

                    if (tagBindingContext != null)
                    {
                        TagItems.Add(tagBindingContext);
                        tagEntry.Text = string.Empty;
                    }
                    else
                    {
                        tagEntry.Text = tag;
                    }

                    tagEntry.Focus();
                }
            }
        }
    }
}

有关更多详细信息,我创建了两个视频,同时显示了它们在Visual Studio和Android设备上的显示情况。

这是我在Android device上所做的事情。在Visual Studio中调试。

0 个答案:

没有答案