简体   繁体   中英

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

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...
}

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 (); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM