Reputation: 819
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
Upvotes: 3
Views: 13548
Reputation: 77
how to pass data one to another by listview on item click in xamarin
protected override void OnCreate (Bundle bundle)
listView.ItemClick+= delegate(object sender, AdapterView.ItemClickEventArgs position)
{
String selectedFromList =(String) (listView.GetItemAtPosition(position.Position));
Intent i =new Intent(this,typeof(RedirectClass));
// i.PutExtra("key",selectedFromList);
// StartActivity(i);
//int pos=Convert.ToInt32(position);
//ListView Clicked item value
//string itemValue =(string)listView.GetItemAtPosition(pos);
//Toast.MakeText(this," position is " +itemValue,ToastLength.Long).Show();
};
}
}
second activity to get data
TextView txt = FindViewById<TextView> (Resource.Id.textView1);
// Intent intent = Intent.getIntent();
string str = Intent.GetStringExtra("key").ToString();
Toast.MakeText (this, " the data is recvied from main is.." + str, ToastLength.Long).Show ();
txt.Text = str.ToString ();
Upvotes: 0
Reputation: 24460
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...
}
Upvotes: 9