Xamarin.Android get object properties from ListView click event

13,330

The event you subscribe to has some nice arguments. If you had explored what you get in the AdapterView.ItemClickEventArgs it would reveal that there is a Position property, which basically gets you a way to get the item from your Adapter, which the clicked View represents.

So basically you can get an incident like:

void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    var incident = incidents[e.Position];
    // do whatever with that incident here...
}
Share:
13,330
user1667474
Author by

user1667474

Updated on June 04, 2022

Comments

  • user1667474
    user1667474 almost 2 years

    I am very new to C# (a few weeks) and Xamarin (about a week).

    I was able to implement the ListView Adapter from the tutorial "Display Entity Collection in ListView on Android (//from http://diptimayapatra.wordpress.com/2013/07/08/xamarin-display-entity-collection-in-listview-in-android/)

    My problem now is that I have no idea how to handle the click event on the TextView text.

    The GetView code from my Adapter is:

    public override  View GetView(int position, View convertView, ViewGroup parent)
    {
        var incident = incidents[position];
        View view = convertView;
        if(view == null)
        {
            view = context.LayoutInflater.Inflate(
                Resource.Layout.ListViewTemplate, null);
        }
    
        view.FindViewById<TextView>(Resource.Id.tvIncident).Text = 
            string.Format("{0}", incident.title);
    
        view.FindViewById<TextView>(Resource.Id.tvIncidentDescription).Text = 
            string.Format("{0}", incident.description);
    
        return view;
    }
    

    My Incident object code is:

    public class Incident
    {
       public int id {get; set;}
       public string title {get; set;}
       public string description {get; set;}
       public double latitude {get; set;}
       public double longitude {get; set;}
    }
    

    then the code in the activity is

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        listView = FindViewById<ListView>(Resource.Id.list);
    
        IncidentGet incGet = new IncidentGet();
        List<Incident> incidents = incGet.GetIncidentData()
    
        listAdapter = new ListViewAdapter(this, incidents);
        listView.Adapter = listAdapter;
    
        listView.ItemClick += listView_ItemClick;
    }
    

    then

    void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        //have no idea how to get the properties of each Incident object here
    }
    

    I am not sure if the listView_ItemClick is the way to go or is there some other way. Any suggestions will be greatly appreciated