Comment mettre en évidence l'élément ListView au toucher?
J'ai un simple ListView
et je veux que chacun des éléments à mettre en lumière, à toucher de l'utilisateur. J'ai pensé que cela arriverait par défaut, mais il ne l'est pas. Pouvez-vous des conseils?
ListView xml:
<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:divider="#206600"
android:dividerHeight="2dp"
android:smoothScrollbar="true"
android:background="#ffffff"
>
</ListView>
Et le code de ma Carte:
private class MyAdapter extends ArrayAdapter<Task> {
private LayoutInflater mInflater;
public MyAdapter(Context context, int resource, List<Task> list) {
super(context, resource, list);
mInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = mInflater.inflate(R.layout.list_item, null);
}
Task task = taskList.get(position);
/* Setup views from your layout using data in Object here */
return v;
}
source d'informationauteur Eugene
Vous devez vous connecter pour publier un commentaire.
Vous pouvez poster votre ligne réelle de mise en page de code, mais je soupçonne que le problème va être que vous définissez une couleur d'arrière-plan sur votre liste ligne. Par défaut, les sélecteurs sont tirés derrière les éléments de la liste (qui ressemble plus belle, depuis la couleur de surbrillance est derrière le texte). Soit de ne pas définir une couleur d'arrière-plan sur votre liste d'articles, ou de tirer le sélecteur sur le dessus au lieu de ListView
drawSelectorOnTop
attribut XML.EDIT: Si vous devez vraiment avoir un arrière-plan opaque pour l'état par défaut et ne souhaitez pas utiliser
drawSelectorOnTop
vous pouvez aussi essayer ceci: Définir un arrière-plan sur votre liste de lignes, mais l'utilisation d'une StateListDrawable à utiliser@android:drawable/list_selector_background
pour tous, mais l'état par défaut (vous pouvez définir un fichier xml dans un drawable votre dossier; voir la StateList la documentation).Vous pouvez également imbriquer une mise en page à l'intérieur de votre extérieur backgrounded ligne de mise en page avec son arrière-plan définie à
@android:drawable/list_selector_background
; de cette façon, le fond serait de dessiner sur le dessus de votre arrière-plan, mais en dessous du contenu.ListView
s ne conservent pas une indication visuelle de l'accent (ou de sélection), tandis qu'en mode tactile. Vous ne verrez ce lorsque vous utilisez le clavier matériel ou des commandes pour naviguer dans votre INTERFACE utilisateur.Voir le Google Le Mode Tactile Android article du Blog pour plus de détails.
Donc, si vous êtes seulement en utilisant la touche mode, vous ne verrez jamais de se concentrer ou de la sélection sur
ListView
s.Je crois que cela a à voir avec la "Activé" attribut des éléments de la ListAdapter.
Si votre Carte contient le code:
Ensuite, chaque élément doit être cliquable (et, par conséquent, doit mettre en évidence sur le fait d'être touché).
Pourriez-vous poster les détails (et, éventuellement, code) de quel type de Carte que vous utilisez pour cette liste?
J'ai du mal avec ce pour quelques jours. En fin de compte, je dois créer un widget qui prend en charge
Checkable
de l'interface et de revenir à ce widget/afficher dans ma cartegetiew()
fonction. Et la liste doit être enListView.CHOICE_MODE_SINGLE
(ou, éventuellement, par tout autre mode spécifié parandroid:choiceMode
) pour garder une trace du choix fait sur l'INTERFACE utilisateur.Donc, en substance, tout ce qui suit doit être mis en place pour l'élément de liste pour rester en surbrillance:
ListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
ListAdapter.getView()
retour un point de vue qui met en œuvreCheckable
interfaceListView.OnItemClickListener
doit appelersetItemChecked(position, true)
pour marquer l'élément à vérifier (et donc le mettre en surbrillance dans la liste)J'espère que cela peut aider quelqu'un qui est également aux prises avec cette.