Tengo un ListView con diseño personalizado para sus artículos y necesito especificar el color de fondo separado para los elementos marcados usando el selector. Aquí está selector para elementos extraños:Necesito ayuda con el selector de color para los artículos ListView marcados
<?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>
y aquí está el selector de artículos incluso:
<?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>
plantilla de elementos ListView se ve así:
<?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>
El elemento raíz del elemento de la lista es CheckableLinearLayout: http://paste.org/pastebin/view/28711
ListView tiene un único el modo de elección (que también trató el modo de opción múltiple, pero también no funciona para mí)
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));
}
}
En el adaptador para este ListView que llamo setChecked() de CheckableLinearLayout pero no cambia su color:
@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;
}
¿Qué estoy haciendo mal? Puedo ver que state_pressed elemento del selector funciona bien pero state_checked no. ¿Cuál será el enfoque correcto para configurar state_checked fondo de XML, no del código?
supongo que su problema es con su adaptador. Para tales cosas, debe extender 'BaseExpandableListAdapter'. Dentro de esa clase puede sobreescribir los métodos 'getGroupView' y' getChildView', y establecer el color/tamaño/forma/etc apropiado. Mira [esta pregunta] (http://stackoverflow.com/questions/3627096/android-expandablelistviews-and-checkboxes/), donde también publiqué una implementación de adaptador de muestra. – rekaszeru
Gracias por su comentario, pero lo principal que estoy tratando de lograr aquí es establecer el color de fondo en XML, no en el código. Me las arreglé para implementar esto en el código pero cuando cambio el estilo de la interfaz de usuario de mi aplicación también necesito cambiar el código. Esto es bastante inconveniente. –
Consulte esta pregunta http://stackoverflow.com/questions/3742979/how-to-get-a-android-listview-item-selector-to-use-state-checked – basicsharp