user1667474
user1667474

Reputation: 819

Xamarin.Android get object properties from ListView click event

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

Answers (2)

sanjay kumar thakur
sanjay kumar thakur

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

Cheesebaron
Cheesebaron

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

Related Questions