Xamarin.Android get object properties from ListView click event
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...
}
user1667474
Updated on June 04, 2022Comments
-
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