Obtener la posición del elemento de vista de lista al hacer clic en el botón

Este es mi evento clickview listview:

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(); } }); 

Y este es mi evento de clic de botón:

 btnNxt = (Button) findViewById(R.id.btnNext); btnNxt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //Here I need to get that position }); 

Ahora necesito obtener la posición del elemento de la vista de lista cliqueada … He declarado la posición globalmente pero eso siempre me da la posición 1.

¿Alguien puede decirme cómo consigo la posición?

Ejecutas esto

  btnNxt = (Button) findViewById(R.id.btnNext); btnNxt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //Here I need to get that position }); 

dentro del método getView? si es así, es muy fácil

  btnNxt = (Button) findViewById(R.id.btnNext); btnNxt.setTag(position); btnNxt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { int position=(Integer)arg0.getTag(); }); 

Sé que estoy un poco tarde con la respuesta, pero ¿qué pasa con esto?

 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); } }; 

en este caso, no necesita configurar tags, etc.

Si está utilizando ViewHolder, asegúrese de usar setTag () de esta manera.

  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 configura TAG () antes de la línea setOnClickListener (), tendrá problemas al desplazarse por la vista de lista.

declara una variable global y en el método onItemClick () de lisview establece la posición de vista como el valor de la variable. ahora usa la misma variable en el método de clic del botón.

 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(,""+global_position,500).show(); }); 

// use “top” para obtener los artículos de vista de lista en la posición superior

// Posición superior de los elementos de ListView

  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; } }); 

// O // Elementos de vista de lista posición superior En el método 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; } });