That is actually more along the lines of what I was talking about, now that I think about it... Changing the background color or drawable for a selected item rather than inflating a completely different view.
I didn't use a selector to do that, but I like that approach better. I was simply storing the selected position in the adapter, and then when getView gets called I would either set the background color or set the background drawable to what I wanted in the case of the position matching the selected position. Thanks, Justin Anderson MagouyaWare Developer http://sites.google.com/site/magouyaware On Mon, May 20, 2013 at 9:01 AM, Kostya Vasilyev <[email protected]> wrote: > 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 <[email protected]> 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<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 [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 > --- > 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 [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- 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 --- 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

