¿Cómo setOnclickListener () en el botón dentro de ListView?
En la aplicación tengo una Listactivity que tiene un adaptador con TextView y Button (etiquetado eliminar). Ahora quiero quitar el botón correspondiente. Compruebe por favor el código y sugiera ???? “
public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { private final Activity context; private final String[] names; private Button deleteButton= null; public MySimpleArrayAdapter(Activity context, String[] names) { super (context, R.layout.imagelistlayout, names); this.context = context; this.names = names; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); deleteButton= (Button)rowView.findViewById(R.id.delete_bn); deleteButton.setTag(position); TextView textView = (TextView) rowView.findViewById(R.id.label); textView.setText(names[position]); deleteButton.setOnClickListener(this); return rowView; } @Override public void onClick(View convertView) { System.out.println(deleteButton.getTag()); } }`
Quiero saber cómo puedo eliminar el elemento cuyo botón se ha hecho clic.
- ¿Cuál es la mejor manera de mantener el adaptador como una clase interna de actividad o fuera?
- Creación de ViewHolders para ListViews con diferentes diseños de elementos
- Implementación correcta de cambiar los datos de ListView con CursorAdapter
- No se puede obtener el número de fila que se ha hecho clic en la vista de lista de android
- Identificar el elemento pulsado en el método ListActivity onListItemClick
- Agregando barra de acciones a listactivity
- NullPointer cuando findViewById () en SimpleCursorAdapter
- Android RelativeLayout y altura de wrap_content?
- Entradas duplicadas en ListView
- cambiar el color de fondo de ListView desactiva el color de resaltado
- OnCreateContextMenu no se está llamando
- Android SimpleCursorAdapter no se actualiza cuando cambia la base de datos
- Actualizar Android ListActivity cuando cambia los datos de la lista?
Sólo manejar en el oyente de clics dentro de getview donde se encuentra el botón utilizando findviewbyid
Esto controlará el clic de botón de fila actual
public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { private final Activity context; private final String[] names; private Button deleteButton= null; public MySimpleArrayAdapter(Activity context, String[] names) { super (context, R.layout.imagelistlayout, names); this.context = context; this.names = names; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); deleteButton= (Button)rowView.findViewById(R.id.delete_bn); deleteButton.setTag(position); TextView textView = (TextView) rowView.findViewById(R.id.label); textView.setText(names[position]); deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //try to hide textview or something it may help } }); return rowView; } }`
Debe intentar no codificar el manejador onClick en el método getView, pero observe cómo asignar un método onClick a un listview. Aquí se asigna el método de la actividad y eso es lo que debe hacer aquí también.
En usted adaptador crea un método llamado setOnXXXClickListener
public void setOnXXXClickListener(final OnClickListener onClickListener) { this.onXXXClickListener = onClickListener; }
Y en su getView asignar esto al botón como así
viewHolder.xxx.setOnClickListener(this.onXXXClickListener);
Desde usted Actividad, puede asignar el método onClick como este
this.adapter.setOnXXXClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "OnXXXClickListener"); } });
deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Log.d("TAG", "position: " + position); } });
Y la posición que usted necesita para hacer a final en getView (posición final int, …, …) Cuando usted tiene la posición, haga lo que quiera con él! Borrar, modificar o lo que sea ..
Muy simple tiene la variable de posición int en getView que se refiere al elemento en el que se ha inflado el botón, así que utilice la variable de posición para eliminar el elemento en el que ha hecho clic. Sólo use el código debajo.
@Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); deleteButton= (Button)rowView.findViewById(R.id.delete_bn); deleteButton.setTag(position); TextView textView = (TextView) rowView.findViewById(R.id.label); textView.setText(names[position]); // deleteButton.setOnClickListener(this); deleteButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //use position here // delete the item from data string havng position index and the use notifydataset } }); return rowView; }
- Determinar el tipo de datos de una columna en SQLite
- Funcionalidad de botón de retroceso en android con kivy