Ok, aquí hay algunas cosas que debe tener en claro acerca de:
- El color de fondo se está configurando en el archivo XML es de la actividad y no de los ListItems que están tratando de definir.
- Cada elemento de la lista tiene su propio archivo de diseño que se debe pasar o inflar en caso de que esté utilizando el diseño complejo para el elemento de la lista.
Voy a tratar de explicar esto con un ejemplo de código:
**** Vamos a empezar con el diseño ListItems ** : guardarlo en su carpeta de res/layout
de ustedes proyecto Android con, por ejemplo ** list_black_text .xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Definig a container for you List Item-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Defining where should text be placed. You set you text color here-->
<TextView
android:id="@+id/list_content"
android:textColor="#000000"
android:gravity="center"
android:text="sample"
android:layout_margin="4dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Bueno, un diseño simple con un TextView
para ser precisos. Debe tener una identificación asignada a TextView para usarla.
Ahora viene a su pantalla/actividad/diseño principal, como dije, está definiendo el fondo de su pantalla con el atributo android:background
. Veo que también ha definido un TextView allí y sospecho que está tratando de definir el contenido/elemento de la lista allí, que no es necesario en absoluto.
Aquí es su diseño Editado:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF">
<ListView
android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE -->
</LinearLayout>
Y, por último, lo más importante, configurar su adaptador.
setListAdapter(new ArrayAdapter<String>(
this, R.layout.list_black_text, R.id.list_content, listItems));
Aviso el recurso disposición que estamos pasando al adaptador R.layout.list_black_text
y R.id.list_content
que es TextView ID que declaramos. También cambié el ArrayAdapter al tipo de cadena porque es genérico.
Espero que esto lo explique todo. Marque mi respuesta aceptada si está de acuerdo.
sucia pero una buena forma de solución rápida
También puede hacer esto con una solución rápida si no desea seguir adelante con diseño complejo definir etc.
al crear la instancia del adaptador de declarar una clase interna para hacer esto, aquí está el ejemplo de código:
ArrayAdapter<String> adapter=new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_1, listItems){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view =super.getView(position, convertView, parent);
TextView textView=(TextView) view.findViewById(android.R.id.text1);
/*YOUR CHOICE OF COLOR*/
textView.setTextColor(Color.BLUE);
return view;
}
};
/*SET THE ADAPTER TO LISTVIEW*/
setListAdapter(adapter);
Muchas gracias amigo. nunca supe que había un archivo xml separado para ListView –
Esto me da el error: ArrayAdapter requiere que el ID del recurso sea un TextView. ¿Cómo se las arregló para que esto funcione sin escribir su propio adaptador? – odiggity
@odiggity, use 4 argumentos constructor en lugar de 3. Si ya está haciendo eso, entonces el 3er arg en 4 arg constructor es una referencia id a la vista de texto descrita en el diseño de su lista, en resumen R.id.list_content en mi example es id que se refiere a textview en el diseño de mi elemento de lista especificado con R.layout.list_black_text – Shardul