Use Getpositionforview or the equiv in mono. It's a member of http://developer.android.com/reference/android/widget/AdapterView.html#getPositionForView%28android.view.View%29
On Tue, Aug 7, 2012 at 1:39 AM, Steven Pack <steven_john_p...@yahoo.com.au>wrote: > > Hi all, long time no post. > > I have a listview. and the items are defined as a textview with a cross > image over on the right. Like this: > > <?xml version="1.0" encoding="utf-8"?> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" > android:orientation="horizontal" > android:layout_width="fill_parent" > android:layout_height="wrap_content"> > <TextView > android:id="@+id/headword_textview" > android:layout_gravity="fill_horizontal" > android:layout_weight="1" > android:layout_width="wrap_content" > android:layout_height="fill_parent" > android:padding="5dp" > android:textColor="@android:color/black" > android:textSize="16sp" > android:contentDescription="Bookmark" /> > <ImageView > android:id="@+id/delete_headword_list_item_button" > android:layout_width="wrap_content" > android:layout_height="wrap_content" > android:padding="10dp" > android:src="@drawable/clear" > android:layout_gravity="center_vertical" > android:contentDescription="Delete bookmark button" /> > </LinearLayout> > > The little cross is an image, and on clicking it, I'd like to delete the > corresponding item from the list. My problem is detecting the image click. > Or, more specifically, attaching and detaching the event handlers and > getting the position right. My code works fine when there is only a single > screen, but as I soon as the list is longer than a screen, and GetView > keeps getting called, the event handler keeps getting re-attached, and then > the positions don't match the index in the list. > > Populating the listview is like this: > > var adapter = new ListActivityRowArrayAdapter<Headword> > (Registry.CustomTypeface, Registry.Settings.TextSize, this, > Resource.Layout.headword_list_item, Resource.Id.headword_textview, > Headwords); > lvHeadwords.Adapter = adapter; > > The custom adapter, in which I customise the textview using some funky > fonts and attach the event handler is like such: > > public class ListActivityRowArrayAdapter<T> : ArrayAdapter<T> > { > Typeface _typeface; > float _textSize; > HeadwordListActivityBase _activity; > > public ListActivityRowArrayAdapter (Typeface typeface, float > textSize, HeadwordListActivityBase context, int resourceId, int > textViewResourceId, ICollection<T> objects) > : base (context, resourceId, textViewResourceId, > objects.ToArray()) > { > _activity = context; > _typeface = typeface; > _textSize = textSize; > } > > public override View GetView (int position, View convertView, > ViewGroup parent) > { > View row = base.GetView (position, convertView, > parent); > > var textView = > row.FindViewById(Resource.Id.headword_textview) as TextView; > if (textView != null && (textView.Typeface != _typeface || > textView.TextSize != _textSize)) > { > textView.SetTypeface (_typeface, 0); > textView.TextSize = _textSize; > } > > var deleteImage = > row.FindViewById(Resource.Id.delete_headword_list_item_button); > if (deleteImage != null) > { > _log.Debug(Tag, "Attaching handler. Position is:" + > position); > deleteImage.Click += (sender, e) => > _activity.DeleteItem(position); > } > return row; > } > } > } > > and deleting the item: > > void DeleteItem(int position) > { > _log.Debug(Tag, "Deleting from position: " + position); > > var item = Headwords[position]; > Headwords.Remove(item); > > RefreshListView(); > } > > > The DeleteItem method throws IndexOutOfRangeExceptions, firstly because it > gets called multiple times and also because the position index doesn't > actually represent the real index in the list somehow. > > Any pointers would be appreciated. > > > > _______________________________________________ > Monodroid mailing list > Monodroid@lists.ximian.com > > UNSUBSCRIBE INFORMATION: > http://lists.ximian.com/mailman/listinfo/monodroid > > -- Extreme Knowledge is not something for which he programs a computer but for which his computer is programming him. -Wozniak
_______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid