在我的Xamarin Forms Project(android)中得到了很多这样的例外。问题是堆栈跟踪几乎没有提供有关如何重现的信息,或者它在何处发生。
Xamarin caused by: android.runtime.JavaProxyThrowable: System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Xamarin.Forms.Platform.Android.FormsTextView'.
Java.Interop.JniPeerMembers.AssertSelf(IJavaPeerable self)<be2616b5140e4cbb8821649c795cfe62>:0
Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod(string encodedMember, IJavaPeerable self, JniArgumentValue* parameters)<be2616b5140e4cbb8821649c795cfe62>:0
Android.Widget.TextView.set_TextFormatted(ICharSequence value)<ec6bb63c41624773b5cc1eb2222982af>:0
Android.Widget.TextView.set_Text(string value)<ec6bb63c41624773b5cc1eb2222982af>:0
Xamarin.Forms.Platform.Android.LabelRenderer.UpdateText()<d572ae0ccf89437fad1de1370c623a06>:0
Xamarin.Forms.Platform.Android.LabelRenderer.OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)<d572ae0ccf89437fad1de1370c623a06>:0
<Module>.invoke_void_object_PropertyChangedEventArgs(object, PropertyChangedEventArgs)(wrapper delegate-invoke)
Xamarin.Forms.BindableObject.OnPropertyChanged(string propertyName)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Element.OnPropertyChanged(string propertyName)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValueActual(BindableProperty property, BindableObject.BindablePropertyContext context, object value, bool currentlyApplying, BindableObject.SetValueFlags attributes, bool silent)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValueCore(BindableProperty property, object value, BindableObject.SetValueFlags attributes, BindableObject.SetValuePrivateFlags privateAttributes)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindingExpression.ApplyCore(object sourceObject, BindableObject target, BindableProperty property, bool fromTarget)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindingExpression.Apply(object sourceObject, BindableObject target, BindableProperty property)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Binding.Apply(object newContext, BindableObject bindObj, BindableProperty targetProperty)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.ApplyBindings(object oldContext, bool skipBindingContext)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.ApplyBindings(object oldContext)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetInheritedBindingContext(BindableObject bindable, object value)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Element.SetChildInheritedBindingContext(Element child, object context)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Element.OnBindingContextChanged()<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.View.OnBindingContextChanged()<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetInheritedBindingContext(BindableObject bindable, object value)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Element.SetChildInheritedBindingContext(Element child, object context)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Element.OnBindingContextChanged()<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.Cell.OnBindingContextChanged()<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.BindingContextPropertyBindingPropertyChanged(BindableObject bindable, object oldvalue, object newvalue)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValueActual(BindableProperty property, BindableObject.BindablePropertyContext context, object value, bool currentlyApplying, BindableObject.SetValueFlags attributes, bool silent)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValueCore(BindableProperty property, object value, BindableObject.SetValueFlags attributes, BindableObject.SetValuePrivateFlags privateAttributes)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValue(BindableProperty property, object value, bool fromStyle, bool checkAccess)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.SetValue(BindableProperty property, object value)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.BindableObject.set_BindingContext(object value)<7b0368eb3d0f405da776a09e3171532a>:0
Xamarin.Forms.TemplatedItemsList<TView, TItem>.<UnhookItem>d__140.MoveNext()<7b0368eb3d0f405da776a09e3171532a>:0
System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state)<67dcc9194d6a4f4f97ac27121b4304c3>:0
System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, object state, bool preserveSyncCtx)<67dcc9194d6a4f4f97ac27121b4304c3>:0
System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, object state, bool preserveSyncCtx)<67dcc9194d6a4f4f97ac27121b4304c3>:0
System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()<67dcc9194d6a4f4f97ac27121b4304c3>:0
System.Threading.ThreadPoolWorkQueue.Dispatch()<67dcc9194d6a4f4f97ac27121b4304c3>:0
System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()<67dcc9194d6a4f4f97ac27121b4304c3>:0
答案 0 :(得分:1)
这是解决方案
创建CustomLabel和CustomLabelRenderer
Android项目中的渲染器代码应该看起来像......
public class CustomLabelRenderer: LabelRenderer
{
protected override void OnAttachedToWindow()
{
try
{
base.OnAttachedToWindow();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
protected override void Dispose(bool disposing)
{
try
{
base.Dispose(disposing);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
解决方案非常黑巧,但它对我有效100%
答案 1 :(得分:1)
这个问题主要是因为ListView中的TextView / TextField。如果您遇到相同的情况,可以将 CachingStrategy 更改为 RecycleElement 。
示例:
<ListView x:Name="AccountDetailsList"
StyleId="AccountDetailsListID"
CachingStrategy="RecycleElement"
ItemsSource="{Binding AccountDetails}"