2010-11-20 20 views
1

Je suis tombé sur un problème étrange avec ListViews.ListView n'affiche aucun retour

Dans l'émulateur, le ListView n'affiche aucun retour lorsqu'un élément est sélectionné pour la sélection. Je pense que j'ai vu cela dans la réalité, mais je ne suis pas sûr. Je m'attendrais à ce que l'élément de la liste soit sélectionné (arrière-plan plus sombre) quand il est pressé, de sorte que l'utilisateur puisse voir, quel élément il a pressé.

Dois-je coder cela?

RG

Après avoir vu les commentaires, j'ai essayé les éléments suivants:

J'ai créé une résolution de fichier/couleur/backgroundstate.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
      android:color="#888"/> 
    <item android:state_pressed="true" 
      android:color="#888"/> 
    <item android:color="#eee"/> 
</selector> 

Puis-je utiliser cela dans listitem.xml comme une couleur d'arrière-plan

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="@color/helptextcolor" 
    android:background="@color/backgroundstate" 
    android:padding="10dp" 
    android:textSize="16sp" > 
</TextView> 

Lorsque j'affiche le ListView avec

ArrayAdapter adapter=new ArrayAdapter<String>(this,R.layout.listitem,names); 
    LV.setAdapter(adapter); 
    LV.invalidate(); 

le programme se bloque.

Il existe trois exceptions liées à cela. Mais le problème semble être le dernier XMLPullParserException:

<item> tag needs a drawable. 

Maintenant?

Répondre

2

<item> En effet, il faut un dessin, pas une couleur. Pour cela, vous avez besoin d'un dessin pouvant être dessiné:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FFFF0000" /> 
</shape> 

... et de l'ajouter à votre liste d'éléments.
En outre, il s'agit d'un fichier drawable qui doit être dans un répertoire /res/drawable-* et non dans le répertoire /res/color/.

Pour résumer:

  • (en option) mettre vos couleurs dans le répertoire/res/valeurs/couleur.Fichier xml avec un nom
  • Créez deux dessins de forme en XML, dans le répertoire/res/drawable, un pour la couleur neutre, un pour la couleur pressée, comme indiqué ci-dessus
  • Créez une liste d'états dessinable comme vous a fait, mais dans le répertoire/res/répertoire drawable
  • utiliser comme l'arrière-plan de votre élément de la liste
0

Oui et non. Ce n'est pas que vous devez le coder, mais vous ne devez pas le désactiver. Si vous utilisez des vues personnalisées pour afficher vos éléments de liste, vous devez mettre un dessin qui permet à votre vue de donner un retour quand il est sélectionné. Par exemple, un plainbitmap ne fait pas.

La meilleure façon de le faire est de créer une liste état étirables, comme ceci:
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
Une entrée listview se comportera comme le bouton décrit dans l'exemple. Si votre arrière-plan dessinable inclut un drawable state_pressed, il doit être affiché lorsque l'entrée de la liste est enfoncée.

+0

Mes ListItems sont TextViews. Ou mieux dire, j'utilise une mise en page pour les éléments, qui est un simple TextView, et un ArrayAdapter pour le ListView pointant vers cette mise en page. Alors, comment puis-je mettre en évidence un TextView? – Rene

+0

Vous pouvez mettre une liste d'états dessinable en arrière-plan de votre vue de texte. La fonctionnalité de surbrillance des arrière-plans de listes d'états n'est pas limitée aux boutons, en fait cela fonctionne pour n'importe quelle vue. – Jean

+0

Ah, je vois. Cela ressemble à un peu d'overkill, et à une pause de performance. Je viens de découvrir que R.layout.simple_list_item_1 fait le travail. Mais je ne peux pas utiliser ses couleurs et sa taille de police. – Rene