[mono-android] BaseAdapter and JavaList problem

John Rayner anyerr at gmail.com
Mon Mar 21 07:34:52 EDT 2011


Curiously it works absolutely fine if I use a regular
System.Collections.Generic.List<T> instead of an
Android.Runtime.JavaList<T>.  I thought (based on some recent email threads)
that it was more appropriate to use JavaList<T> for this sort of thing.  Can
anyone pls clarify?

Cheers,
John

On Mon, Mar 21, 2011 at 10:03 AM, John Rayner <anyerr at gmail.com> wrote:

> Hiya,
>
> I'm new to Android dev, so I'm prob doing something stupid, but I'm having
> some difficulty writing a custom adapter for a ListView.  I use an
> Android.Runtime.JavaList collection to hold my bound items, but whenever I
> try to retrieve any values from it I always get null values even though I've
> added valid objects.  As a result, my GetView method is not correctly
> populating my list view.  Here is my adapter:
>
>     public class SimpleMessageAdapter : BaseAdapter
>     {
>         private readonly Context _context;
>         private readonly IList<SimpleMessage> _list;
>
>         public SimpleMessageAdapter(Context context, IList<SimpleMessage>
> list)
>         {
>             _context = context;
>             _list = list;
>         }
>
>         public override Object GetItem(int position)
>         {
>             return _list[position];
>         }
>
>         public override long GetItemId(int position)
>         {
>             return position;
>         }
>
>         public override View GetView(int position, View convertView,
> ViewGroup parent)
>         {
>             TextView tv = convertView as TextView ?? new
> TextView(_context);
>             tv.Text = _list[position] != null ? _list[position].Text :
> "(error)";       // _list[position] is *always* null here
>             return tv;
>         }
>
>         public override int Count
>         {
>             get { return _list.Count; }
>         }
>     }
>
> And here is my Activity, for reference:
>
>     [Activity(Label = "AndroidClient", MainLauncher = true)]
>     public class MessagingActivity : Activity
>     {
>         private MessageChannel _channel;
>         private IList<SimpleMessage> messageList = new
> JavaList<SimpleMessage>();
>         private SimpleMessageAdapter _adapter;
>
>         protected override void OnCreate(Bundle bundle)
>         {
>             base.OnCreate(bundle);
>
>             // Set our view from the "main" layout resource
>             SetContentView(Resource.Layout.Main);
>             var messages = FindViewById<ListView>(Resource.Id.messages);
>             _adapter = new SimpleMessageAdapter(this, messageList);
>             messages.Adapter = _adapter;
>
>             _channel = new MessageChannel();
>             _channel.ReceivedMessages
>                 .OfType<SimpleMessage>()
>                 .Subscribe(msg => AddMessage(msg));
>
>             // Get our button from the layout resource,
>             // and attach an event to it
>             Button button = FindViewById<Button>(Resource.Id.send_button);
>             button.Click += delegate {
> SendMessage(FindViewById<EditText>(Resource.Id.new_message).Text.ToString());
> };
>
>             Button button2 = FindViewById<Button>(Resource.Id.poll_button);
>             button2.Click += delegate { _channel.ForcePoll(); };
>         }
>
>         private void AddMessage(SimpleMessage msg)
>         {
>             RunOnUiThread(() =>
>                               {
>                                   messageList.Add(msg);     // This is
> where I add my objects into the list
>                                   _adapter.NotifyDataSetChanged();
>                               });
>         }
>
>         private void SendMessage(string message)
>         {
>             _channel.Send(new SimpleMessage
>                               {
>                                   Text = message
>                               });
>         }
>     }
>
> All help appreciated.
>
> Cheers,
> John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/mailman/private/monodroid/attachments/20110321/41afdddd/attachment-0001.html 


More information about the Monodroid mailing list