I want to know on how I can change the background color of the selected item on my listView. I only want to change the specific item clicked by the user, meaning if the user clicks another item it will be the one which is highlighted. Well since I want it to keep simple as possible and use the default android listview I used this code instead:
record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
try{
for (int ctr=0;ctr<=record_items.length;ctr++){
if(i==ctr){
record_list.getChildAt(ctr).setBackgroundColor(Color.CYAN);
}else{
record_list.getChildAt(ctr).setBackgroundColor(Color.WHITE);
}
}
}
catch (Exception e){
e.printStackTrace();
}
Log.v("Selected item",record_list.getItemAtPosition(i));
}
});
Ok this one is working but the problem is that it's slow. Now I want to know if there's any other way around that I can do which will give the same output as I made.
I tried using record_list.getSelectedView().setBackgroundColor(Color.CYAN);
but it gives me a null pointer exception.
I also tried the selector.xml but it also didn't do the trick. Furthermore, there is one properties here on ListView which is called listSelector. It's a drawable as said by the documentation "Drawable used to indicate the currently selected item in the list." I also believe that this should do the trick and yes it do the trick on my emulator but not on my galaxy tab. I also tried the other methods but nothing works as I wanted it to be.
I'm also doing the similar thing: highlight the selected list item's background (change it to red) and set text color within the item to white.
I can think out a "simple but not efficient" way: maintain a selected item's position in the custom adapter, and change it in the ListView's
OnItemClickListener
implement:Then update the selected item's background and text color in
getView()
method.After searching for a while, I found that many people mentioned about to set
android:listSelector="YOUR_SELECTOR"
. After tried for a while, I found the simplest way to highlight selected ListView item's background can be done with only two lines set to the ListView's layout resource:There's also other way to make it work, like customize
activatedBackgroundIndicator
theme. But I think that would be a much more generic solution since it will affect the whole theme.use the below xml as listitem background it will solve all the issues. The selected will be highlighted though you scrolled down.
Thanks, Nagendra
You can use a selector. Change the colors values and modify the below according to your needs.
bkg.xml in drawable folder
pressed.xml in drawable folder
normal.xml in drawable folder
Set the background drawable to listview custom layout to be inflated for each row
I recommend using a custom listview with a custom adapter.
If you have not used a custom adapter you can set the listselector to listview as below
Simplest way I've found:
in your activity XML add these lines:
or programatically set these properties:
My particular example:
thanks to AJG: https://stackoverflow.com/a/25131125/1687010
assume you want one item to be clicked each time. Then this code works well. Let's take the listview name as stlist
You can keep track the position of the current selected element:
And override the getView method of your adapter:
For me it did the trick.