【发布时间】:2014-08-21 00:50:46
【问题描述】:
我有以下设置: 一个有 2 个标签的应用程序。在第二个选项卡上有一个绑定到 ObservableCollection 的 ListView。在第一个选项卡上,有一些控件会导致第二个选项卡的 ViewModel 重新加载 ObservableCollection。在我添加了一个自定义 MvxAdapter 之前它运行良好(多态列表项需要它)。之后每次更新后,我都会在应用程序输出中看到以下异常(请注意,列表仍会重新加载其值):
mvx:Warning: 42.24 Exception masked during Adapter RealNotifyDataSetChanged ArgumentException: 'jobject' must not be IntPtr.Zero.
Parameter name: jobject
at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod) [0x00010] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/8e79d361/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:866
at Android.Widget.BaseAdapter.NotifyDataSetChanged () [0x00058] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/8e79d361/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Widget.BaseAdapter.cs:311
at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.RealNotifyDataSetChanged () [0x00000] in <filename unknown>:0
mvx:Warning: 42.24 Exception masked during Adapter RealNotifyDataSetChanged ArgumentException: 'jobject' must not be IntPtr.Zero.
Parameter name: jobject
at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod) [0x00010] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/8e79d361/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:866
at Android.Widget.BaseAdapter.NotifyDataSetChanged () [0x00058] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.14-series/8e79d361/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.Widget.BaseAdapter.cs:311
at Cirrious.MvvmCross.Binding.Droid.Views.MvxAdapter.RealNotifyDataSetChanged () [0x00000] in <filename unknown>:0
我想知道是否有人可以帮助我找出引发这些异常的原因。
public override View OnCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.ChildPage_History, null);
listView = view.FindViewById<MvxListView> (Resource.Id.history_list);
listView.Adapter = new CustomAdapter (this.Activity, (IMvxAndroidBindingContext)BindingContext);
return view;
}
【问题讨论】:
-
我怀疑你已经在某个地方实现了一个 Java 接口,而没有从
Java.Lang.Object继承,只是传入IntPtr.Zero是真的吗?你能显示CustomAdapter的代码吗? -
不,我没有实现任何 Java 接口。这是
CustomAdapter的代码:gist.github.com/anonymous/124bbc41b5187447241d -
不确定这里发生了什么,但如果您可以制作一个可重现的示例并将其放到 GitHub 或类似的地方,我很乐意帮助调试它。
-
我们也经常收到这些错误。
-
这个问题有解决办法吗?
标签: android listview xamarin mvvmcross