affectation de valeurs cachées pour un élément de liste
J'ai une activité qui s'étend ListView. - Je remplir ma liste avec les résultats d'une requête à une base de données sqlite. Un élément de la liste se compose de start_time, end_time, client_name et de l'état. Ce sont les 4 bits sur les infos que j'ai besoin d'afficher pour chaque élément de la liste.
Ma question est: Est-il possible pour moi d'affecter des éléments cachés à cet élément ListView?
Par exemple, je veux stocker le champ _id de la ligne de base de données pour que l'élément de liste, de sorte que quand je clique dessus je peux commencer une nouvelle activité basée sur les données de la base de données en ligne.
MODIFIER
Le Code que j'utilise pour remplir ma liste de mon Curseur:
String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME};
//the XML defined views which the data will be bound to
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display };
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to);
Où R. layout.list_item est le XML pour mon élément de la liste. Je viens du PHP/HTML arrière-plan, donc ce que je ferait ici est d'avoir un champ caché pour tenir mes _id de la valeur que je puisse ensuite l'accès une fois l'élément de liste sélectionné. puis-je faire quelque chose de semblable dans android? puis-je mettre un caché champ _id dans mon xml de mise en page?
OriginalL'auteur Kevin Bradshaw | 2010-08-16
Vous devez vous connecter pour publier un commentaire.
Vous devriez essayer de desserrer-vous de l'évolution du web est un état d'esprit un peu. Il n'est pas nécessaire de stocker une telle chose comme l'id dans un champ caché de votre point de vue. Qui serait mélanger vos données avec votre interface utilisateur et de créer beaucoup de confusion et inutile d'afficher les objets.
Si vous utilisez une base de données sqlite pour stocker vos valeurs, vous devez utiliser un CursorAdapter pour le gestionnaire de la liste de vos éléments. La CursorAdapter stocke le résultat que vous avez obtenu à partir de la Base de données et gère la façon dont les données sont affichées à l'utilisateur. Ensuite, si vous enregistrez un onItemClickListener sur votre ListView l'auditeur va recevoir la carte et la position de l'élément de données dont la cellule a cliqué dans l'adaptateur. Maintenant, vous pouvez utiliser getItem pour récupérer un curseur pointant vers la base de données, résultat qui a été utilisé pour créer le listitem. Maintenant, vous pouvez obtenir l'id ou de toutes autres valeurs qui ne sont pas présentés à l'utilisateur dans la base de données de résultat et de l'attacher à l'intention de commencer la prochaine activité.
Merci pour votre réponse. Après avoir cherché de la documentation sur l'élément de la liste des auditeurs, j'ai découvert que onListItemClick passe automatiquement en rowID du curseur de résultat. (_id colonne à partir de la base de données). J'allais au sujet de cette tout faux (comme vous l'avez souligné) comme je suppose que j'aurais à ajouter à l'élément de la liste manuellement, je dod pas compte qu'android s'en charge automatiquement. Merci, Réponse acceptée.
+1 pour la bonne explication...Mais Dans le cas de SimpleAdapter comment je peux obtenir le même ?
"Vous devriez essayer de desserrer-vous de l'évolution du web est un état d'esprit un peu." +1
clair et droit au but
OriginalL'auteur Janusz
Vous devriez envisager la création d'un objet java qui permettrait de rassembler toutes ces informations. par exemple, vous pouvez créer une classe comme "ListItem" et chaque élément de 5 propriétés :
start_time
end_time
client_name
statut
id
(et plus si vous avez besoin d')
Et puis, vous avez 2 possibilités, soit vous sérialiser vous vous opposez à mettre l'ensemble de l'objet dans la base de données, ou vous gardez la structure que vous avez déjà (je suppose), et chaque ligne de votre base de données devient un
ListItem
objet. Ensuite, lorsque vous interrogez votre base de données, vous les mettez tous dans un ArrayList, et d'étendre ArrayAdapter de faire votre propre adaptateur. Enfin, dans la méthode getView, vous appelezmyListItem.getEnd_Time
et tous la méthode que vous avez besoin pour l'affichage des données, et tout simplement de ne pas utiliser legetId
, que vous pouvez utiliser directement à partir de l'adaptateur lorsque vous avez besoin de l'objet.Qu'est-ce que cette façon de traiter une réponse quand les gens prennent le temps d'expliquer les choses pour vous et que vous venez de voter les. Je ne peux pas le croire.
Salut Sephy, je dois préciser que ce n'était pas moi qui déclassés votre réponse. Je vous remercie de votre réponse et du temps que vous avez pris à regarder ma question. Je ne peux pas dire qui déclassé comme je ne sais pas. Il en va de même pour Kuroutadori réponse.
ok, plz accepter mes excuses alors. C'est une drôle de façon de passer par la dégradation de personnes de réponse...
OriginalL'auteur Sephy
Si vous avez besoin de non-affichage de db cols autres que _id, dans votre ListView est onItemClick(...)
appelez simplement:
Alors vous pouvez obtenir tout non-affichage des cols de la liste sélectionnée point/ligne.
Que Janusz mentionné, si vous avez seulement besoin _id, il suffit d'appeler:
OriginalL'auteur macio.Jun