How are you controlling the presentation of selection? I would think your approach -- which is great in all other respects -- would show the combined header+row being selected when navigated using the D-pad/trackball/whatever.
On Thu, Nov 11, 2010 at 8:00 AM, Kostya Vasilyev <[email protected]> wrote: > This came up before and I recommended a simple trick to implement this. I > heard that it worked pretty well. > > You will need your own list adapter, and two types of views, as Mark says. > > Implementing per-group separators as self-contained list view items is > tricky, as data item numbering will "slide" (the separators are not indexed > by the same sequence of numbers as data items in the backing array). > > The trick is to use a list item layout that includes both the regular list > item view (for data), as well as a header that indicates the start of a new > group. > > This list item layout would then be used by the list adapter in the case > where the data item is the start of its respective group. This only requires > a simple lookup of the previous item in the data array, and then a test > whether both the current and the previous item belong to the same group. > > If both items belong to the same group, the adapter should return a layout > that's just for displaying item data. > > If the previous item belongs to a different group, it means that the current > item is the start of a distinct new group. In this case, the adapter should > return a layout that has both views for displaying data (as in the first > case), as well as some kind of header / group indicator. > > The advantage of this trick is that item numbering in the list view > (including the number of items) stays the same as in the backing data array. > So, you don't have to make a separate pass over data to determine where > group boundaries are, how many of them exist, or perform any kind of mapping > between item positions in the list view and in the data array. > > -- Kostya > > > 11.11.2010 15:26, Mark Murphy пишет: >> >> On Thu, Nov 11, 2010 at 7:20 AM, Neilz<[email protected]> wrote: >>> >>> Hi all. I have created a ListView from a collection of objects, using >>> an ArrayAdaptor to set the items. >>> >>> The objects used to populate the list have a NAME field, and are >>> sorted into alphabetical order, so ultimately the ListView is long >>> list of names. >>> >>> I now want to make the list more user friendly. I'd like to add a >>> separator for each letter of the alphabet, saying "A", "B" etc. The >>> separator could be one of the list items (non-clickable) or just a >>> normal View. >>> >>> I'm just not sure how I can manipulate the ListView to achieve this, >>> and would appreciate any help. >> >> It's not a question of the ListView, but of the ListAdapter. Your >> ListAdapter needs to: >> >> -- Override getViewTypeCount() to return 2 >> -- Override getItemViewType() to return 0 for regular rows and 1 for >> headings >> -- Override getView() (or newView() and bindView() for CursorAdapter) >> and have it properly create the right rows and bind them >> >> This is somewhat of a pain. >> >> I have a MergeAdapter that can simplify it, but only where each >> section is its own adapter, with plain Views being interspersed: >> >> https://github.com/commonsguy/cwac-merge >> >> Creating a HeaderCursorAdapter that injects headings based on some >> rule (e.g., when the first letter of such-and-so column in the Cursor >> changes) is on my list of 18,000 things to do. Though anyone is >> welcome to go and beat me to writing it. :-) >> > > > -- > Kostya Vasilyev -- WiFi Manager + pretty widget -- > http://kmansoft.wordpress.com > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Mark Murphy (a Commons Guy) http://commonsware.com | http://github.com/commonsguy http://commonsware.com/blog | http://twitter.com/commonsguy Android App Developer Books: http://commonsware.com/books -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

