Maybe it's just me, but... On Monday, May 20, 2013 6:39:14 PM UTC+4, MagouyaWare wrote: > > > On Thu, May 16, 2013 at 3:14 AM, Miha <miha.v...@gmail.com > <javascript:>>wrote: > >> One possible solution I see is modifying the backing adapter >> implementation and providing a different view based on the state of the >> item, but that seems like wrong approach -- I would have to update the >> adapter with information on the selected item and call >> notifyDataSetChanged, which would (I suppose) result in an unnecessary >> re-drawing of the whole list. > > > Note though, that it doesn't redraw the ENTIRE list... just the items that > are visible on the screen. So, even if you have 500 items in your list, > you are only going to be redrawing the 10-20 items that are actually > visible to the user. I've used this approach before and it works quite > well. >
Implementing highlight through getView, and with a separate view type seems awfully backwards, since the framework already has mechanisms for doing almost all of it. A custom list item background should let the standard ListView item background show in certain states, e.g. first two states here: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/transparent" android:state_pressed="true"/> <item android:drawable="@android:color/transparent" android:state_selected="true"/> <item android:drawable="@color/theme_light_message_list_checked" android:state_checked="true"/> <item android:drawable="@color/theme_light_message_list_read_background"/> </selector> Using ListView.drawSelectorOnTop=true would be even easier, but it can have some visual side effects (or not... depends on list item view... mine don't like this). The third state is what I use to implement "currently selected items" highlight on Android 2.1 - 4.2, by using setChecked on my item layouts. I chose this rather than state_activated, because the latter is API 11 and higher. public class AbsMessageListItemLayout extends RelativeLayout { public void setChecked(boolean isChecked) { if (mIsChecked != isChecked) { mIsChecked = isChecked; refreshDrawableState(); } } private static final int[] STATE_CHECKED = new int[] { android.R.attr.state_checked }; @Override protected int[] onCreateDrawableState(int extraSpace) { int[] baseState = super.onCreateDrawableState(extraSpace + 1); if (mIsChecked) { mergeDrawableStates(baseState, STATE_CHECKED); } return baseState; } } The final state in the above drawable is application specific (read/unread message indication), can be ignored... -- K > Thanks, > Justin Anderson > MagouyaWare Developer > http://sites.google.com/site/magouyaware > -- -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.