Ceci est mon événement de liste de diffusion:
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
ItemDetails obj_itemDetails = (ItemDetails)o;
Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
}
});
Et voici mon événement de clic sur un bouton:
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
Maintenant, je dois obtenir la position de l'élément de liste visualisé sur lequel j'ai cliqué .. J'ai déclaré une position globale, mais cela me donne toujours la position 1.
Quelqu'un peut-il me dire comment puis-je obtenir le positon?
exécutez-vous cela
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Here I need to get that position
});
à l'intérieur de la méthode getView? si c'est très facile
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setTag(position);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int position=(Integer)arg0.getTag();
});
Je sais que je suis un peu en retard avec la réponse, mais qu'en est-il de ceci:
private OnClickListener myButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
View parentRow = (View) v.getParent();
ListView listView = (ListView) parentRow.getParent();
final int position = listView.getPositionForView(parentRow);
}
};
dans ce cas, vous n'avez pas besoin de définir des balises, etc.
Si vous utilisez ViewHolder, assurez-vous d'utiliser setTag () comme ceci.
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.custom_row, parent, false);
holder.btnNxt = (Button) convertView.findViewById(R.id.btnNext);
holder.btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int position=(Integer)arg0.getTag();
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btnNxt.setTag(position); // <---- setTag() here
return convertView;
}
private class ViewHolder {
Button btnNxt;
}
}
Si vous setTag () avant votre ligne setOnClickListener (), vous aurez un problème lorsque vous faites défiler votre liste.
déclarez une variable globale et dans la méthode onItemClick () de lisview définissez la position de la vue en tant que valeur de variable . utilisez maintenant la même variable dans la méthode de clic de button.
int global_position =0; // your global variable
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
global_position =position;
}
});
btnNxt = (Button) findViewById(R.id.btnNext);
btnNxt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(<context>,""+global_position,500).show();
});
// utilise "top" pour obtenir les éléments de la liste de contrôle en première position
// Liste des éléments de la liste de lecture
int top;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View lView, final int pos, long id) {
top = lView.getTop();
if (top < 1) top = 1;
}
});
// Or// Les éléments de la liste de contrôle se trouvent en première position Sous la méthode getView de CustomAdapter
int top;
final View finalConvertView = convertView;
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
top = finalConvertView.getTop();
if (top < 1) top = 1;
}
});