Mam ListView z niestandardowym układem dla jego elementów i trzeba określić osobny kolor tła dla zaznaczonych elementów za pomocą selektora. Oto selektor dla nieparzystych elementów:Potrzebujesz pomocy z selektorem kolorów dla zaznaczonej listy Wyświetl elementy
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/black" />
<item android:state_checked="true" android:drawable="@android:color/black" />
<item android:state_selected="true" android:drawable="@color/red" />
<item android:drawable="@android:color/white" />
</selector>
i tu jest selektor nawet dla przedmiotów:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/black" />
<item android:state_checked="true" android:drawable="@android:color/black" />
<item android:state_selected="true" android:drawable="@color/red" />
<item android:drawable="@color/gray" />
</selector>
element ListView szablon wygląda tak:
<?xml version="1.0" encoding="utf-8"?>
<com.androidhub.core.CheckableLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="40dip">
<TextView
android:text="TextView"
android:id="@+id/textView1"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:gravity="center_vertical"
android:textColor="@color/list_item"></TextView>
</com.androidhub.core.CheckableLinearLayout>
Element główny element listy jest CheckableLinearLayout: http://paste.org/pastebin/view/28711
ListView ma jeden Tryb wyboru (próbowałem również tryb wielokrotnego wyboru, ale to też nie działa dla mnie)
public class MainActivity extends ListActivity {
List<String> items = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
items.add("test 1");
items.add("test 2");
items.add("test 3");
items.add("test 4");
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setAdapter(new TestAdapter(this, items));
getListView().setBackgroundColor(getResources().
getColor(android.R.color.white));
}
}
adapter do tego ListView nazywam setChecked() metody CheckableLinearLayout ale to nie zmienia swój kolor:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View v = convertView;
if(v == null) {
v = inflater.inflate(R.layout.list_item, null);
}
if(position % 2 != 0) {
v.setBackgroundResource(R.drawable.list_item_even);
}
else {
v.setBackgroundResource(R.drawable.list_item_odd);
}
if(parent instanceof ListView) {
ListView lv = (ListView)parent;
if(v instanceof CheckableLinearLayout) {
CheckableLinearLayout cll = (CheckableLinearLayout)v;
cll.setChecked(lv.isItemChecked(position));
}
}
return v;
}
Co robię źle? Widzę, że pozycja state_pressed z selektora działa dobrze, ale nie sprawdza stanu_patterned. Co będzie właściwym podejściem do ustawienia state_checked tła z XML, a nie z kodu?
Chyba masz problem z kartą. Do takich rzeczy powinieneś rozszerzyć 'BaseExpandableListAdapter'. W obrębie tej klasy można zastąpić metody 'getGroupView' i' getChildView' oraz ustawić odpowiedni kolor/rozmiar/kształt/etc. Sprawdź [to pytanie] (http://stackoverflow.com/questions/3627096/android-expandablelistviews-and-checkboxes/), gdzie zamieściłem przykładową implementację adaptera. – rekaszeru
Dzięki za komentarz, ale najważniejsze, co staram się tutaj osiągnąć, to ustawienie koloru tła w XML, a nie w kodzie. Udało mi się zaimplementować to w kodzie, ale gdy zmieniam styl mojej aplikacji, muszę zmienić także kod. Jest to dość niewygodne. –
Zobacz to pytanie http://stackoverflow.com/questions/3742979/how-to-get-a-roidroid-listview-item-selector-to-use-state-checked – basicsharp