On Oct 15, 2011, at 10:44 AM, Stuart Johnson wrote: > I have a List<> with an ArrayAdapter that shows the contents of that list. > > If I make a change to one of those items in the List<>, and do > NotifyDataSetChanged() in the UI thread, I can see those changes. But > if I .Add to the List<>, I cant see the new items.
We expose standard .NET interface collection types instead of Java interface collection types, e.g. IList<T> instead of java.util.List<E>, to facilitate greater code sharing. This is generally good. :-) However, the Java code still wants/needs/requires a java.util.List<E>, so there are two ways we could have gone with this: 1) Write a java.util.List<E> implementation which wraps an IList<T>, delegating all List<E> method calls. This means that every collection traversal from Java would require several Java->managed transitions. 2) Copy the IList<T> into an internal java.util.ArrayList<E> wrapper on "input", and let Java manipulate the Java collection. This would allow ~direct Java access to the collection, though invocation of individual elements would require a Java->managed transition. For reasons I'm not entirely sure of (probably performance), we went with (2), which is exactly what you're seeing -- when you add an element to your List<T>, Android doesn't see it. Android doesn't see it because it's not present in the Java-side collection, because a new collection was created and copied when creating the original ArrayAdapter instance. http://docs.xamarin.com/android/advanced_topics/api_design#Collections The workaround is to use an Android.Runtime.JavaList<T>, which wraps a Java-side java.util.ArrayList, and thus adding an element to a JavaList<T> will make it immediately visible to Java code. - Jon _______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid