J'essaie d'obtenir la valeur d'un élément sélectionné dans un adaptateur personnalisé sur une liste. J'essaye ceci avec le code suivant:
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
View curr = parent.getChildAt((int) id);
TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem);
String playerChanged = c.getText().toString();
Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();
}
Au début, si je clique, les valeurs sont bonnes, mais une fois que j'ai fait défiler et que j'ai cliqué sur un autre élément, je me suis trompé de valeur de cet élément cliqué ... Avez-vous une idée de la cause?
Le paramètre v
est la ligne en cours. alors utilisez:
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);
String playerChanged = c.getText().toString();
Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show();
}
(Ou vous pourriez utiliser getChildAt(position)
mais ce serait plus lent.)
Comprenez que vous pourrez peut-être simplifier davantage ceci en fonction de votre mise en page.
Juste un petit changement est nécessaire
TextView c = (TextView) v.findViewById(R.id.tvPopUpItem);
Puisque vous utilisez une vue personnalisée, vous devez passer l’argument View dans votre OnItemClickListener, puis vous devez utiliser cette valeur pour obtenir les détails de TextViews présents dans cette
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class);
i.putExtra("hello",adapter.getItem(position).getUsername() );
startActivity(i);
}
});
Ici, nom_utilisateur est un champ de chaîne déclaré dans une classe et vous devez contourner la méthode getItem()
dans la classe adaptateur pour obtenir les détails de la ligne gonflée lorsque vous cliquez sur.