[mono-android] java translation, mark murphy 05 fancy viewlist example
Michael Prenez-Isbell
michael.isbell at gmail.com
Thu Mar 17 14:06:16 EDT 2011
thank you!!!
i'm creating a git repository for these examples
Sent from my iPhone
On Mar 17, 2011, at 12:11 PM, Jonathan Pryor <jpryor at novell.com> wrote:
> There were two bugs with your translation.
>
> On Mar 16, 2011, at 1:41 AM, Michael Isbell wrote:
>> FILE 1
> ...
>> public class LunchList : Activity
>> {
>> IList<Restaurant> model=new List<Restaurant>();
>
> Change 1: make this a JavaList<Restaurant>, not a List<Restaurant>. Currently, IList<T> marshaling is "[In]" (to use a P/Invoke equivalent). That is, the contents of the list are copied into a Java-side java.util.ArrayList, and that copy is passed to Java code.
>
> This is a problem because later, in LunchList.onSave(), you call adapter.Add(restaurant), which alters the java-side list but NOT the managed-side list.
>
> By using JavaList<T> instead, you have a single list, so when the list is changed by Java code the changes are visible within managed code.
>
>> FILE 2
> ...
>> public class RestaurantAdapter : ArrayAdapter<Restaurant>
> ...
>> public View getView(int position, View convertView,
>> ViewGroup parent) {
>
> Change 2: this is wrong. The Java code doesn't make it obvious, but this is supposed to override a base class method. (Specifically, the sample code _should_ have used @Override to make this clearer, but @Override is optional, so Java missing @Override doesn't break anything. Not overriding a method in C#, meanwhile, _does_ break things.)
>
> Thus, you want:
>
> public override View GetView(int position, View convertView, ViewGroup parent) {
>
> With those two changes, the sample works for me.
>
> - Jon
>
> _______________________________________________
> Monodroid mailing list
> Monodroid at lists.ximian.com
>
> UNSUBSCRIBE INFORMATION:
> http://lists.ximian.com/mailman/listinfo/monodroid
More information about the Monodroid
mailing list