Khotmanish,
Nie jestem pewien co masz na myśli przez to najbardziej efektywny droga. Istnieje wiele sposobów, które są bardzo szybkie, ale często zależy to od tego, co wiesz przed czasem, a czego nie.Należy również pamiętać, że właściwości dynamicznego widoku są mocno niezrozumiane, ale bardzo skuteczne pomimo popularnych mitów. Ludzie z Google wykonali niesamowitą robotę przy tworzeniu interfejsu użytkownika.
Jeśli znasz go z wyprzedzeniem, możesz po prostu utworzyć właściwość StateListDrawable dla każdego widoku i zastosować ją do każdego z nich w trakcie działania adaptera.
zbudować StateListDrawable, tworzyć jeden:
StateListDrawable _drawStates;
Następnie, dla każdego stanu, dodać rozciągliwej czego potrzebujesz:
_drawStates.add(new int[] {android.R.attr.state_pressed}, _newImage);
To jest tak proste, jak w poniższej linii w swojej getView () dla twojego adaptera:
v.setBackgroundDrawable(_drawStates);
Alternatywnie możesz zmienić tło dynamicznie zgodnie z wyborem. Można to zrobić w OnListItemClick()
. Zobaczysz, że OnListItemClick()
wyświetli dokładny widok, który został kliknięty. Gdy już to zrobisz, możesz znaleźć dziecko przez jego id
i zmienić jego właściwości i invalidate()
go. Często używam tej sztuczki. Oszczędza mi to dużo pamięci, ale nie robię nic, co by naprawdę wymagało dużego procesora. Możesz zmienić prawie każdą nieruchomość tutaj bez prawie żadnego przetwarzania. Oto przykład:
@Override protected void onListItemClick(final ListView inList, final View v, final int atPos, final long rowID)
{//Get the Child, set the properties
ImageView _img = (ImageView)(v.findViewById(R.id.app_package));
_img.setBackgroundColor(myClickedColor);
_img.invalidate(); // <---- BEST Option
// ... OR ...
v.invalidate(); // <---- 2nd Best Option
// ... OR ...
inList.invalidate(); // <---- Last resort or specialized implementation
}
Ważne jest, aby pamiętać, że robienie tego dynamicznie ma pewne zastrzeżenia, jeśli chodzi o kolory tła. MUSISZ pobrać dziecko z klikniętego widoku ... Nie listy. Po drugie, zmieniając kolory tła, w rzeczywistości zmieniasz tło. Oznacza to, że wszystkie inne "stanowe" właściwości znikają i musisz je ręcznie zmienić (jeśli chcesz na początku).
Teraz bardziej popularnym, ale nieco mniej elastycznym podejściem jest zbudowanie StateListDrawable w XML. Jest wiele zasobów, aby dowiedzieć się, jak to zrobić w witrynie dla programistów Androida.
Nadzieja to pomaga, FuzzicalLogic
"AFAIK nie możemy zastosować stylów w selektorze.Czy jest lepszy sposób pracować nad tym zamiast obsługi w kodzie Java?" Jeśli nie możesz tego zrobić w selektorze, jak inaczej można to zrobić, ale w Javie? Może mógłbyś zastąpić atrybuty stylu, do których odwołuje się domyślny selektor? – nmr
Można zastosować style, aby zmienić kolor tła/rysowanie. Nie pomogłoby to zmienić rozmiaru czcionki. Czy muszę również określić selektor dla każdego z widoków podrzędnych? W kodzie java jak w, wewnątrz getView(). –