2017-04-13 120 views
1

在我的Xamarin Forms Project(android)中,我得到了這個異常。問題是stacktrace幾乎沒有提供關於如何重現的信息,或者它發生在哪裏。Xamarin Forms Dispose Textview

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

是否使用涉及一個TextView定製呈現?這是否發生在添加了某段代碼之後? –

+0

是的,我有2個renderes(自定義ImageButton和自定義Entry Renderer)裏面有標籤。但是很難知道哪一個可能導致問題。正如我所說,我沒有關於例外發生的情況。 –

+1

我明白了,但是如果你沒有任何背景,我們甚至更少,因爲我們沒有代碼可以查看,也不知道你在做什麼。嘗試通過在渲染器中設置斷點並通過它們或者註釋行並查看哪一個導致問題來消除選項。然後,如果您仍然不知道發生了什麼事情,請將您的問題與相關代碼一起發佈,供我們查看。 –

回答

0

下面是解

創建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%

0

這個問題大多發生是因爲的ListView中的TextView/TextField。如果您有同樣的情況,則可以將CachingStrategy更改爲RecycleElement

例子:

<ListView x:Name="AccountDetailsList" 
         StyleId="AccountDetailsListID" 
         CachingStrategy="RecycleElement" 
         ItemsSource="{Binding AccountDetails}"