Capturar Haga clic en una lista personalizada en Android

Utilicé un archivo XML personalizado creado bind my db cursor en un ListActivity. Cada elemento del archivo XML tiene 2 botones. Quiero capturar el evento click del botón y la posición en la lista.

Este es mi archivo XML

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/smListName" android:paddingTop="2dip" android:paddingBottom="3dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textSize="22dip" /> <Button android:id="@+id/smListCompleted" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:textStyle="bold" android:textColor="#0000ff" /> <Button android:id="@+id/smListNotCompleted" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:textColor="#ff0000" android:textStyle="bold" /> </LinearLayout> 

Y así es como estoy vinculante

 db = openOrCreateDatabase("ITC", MODE_PRIVATE, null); Cursor outlets = db.rawQuery("Select s.salesmanid as _id, s.name ...", null); this.setListAdapter(new SimpleCursorAdapter(this, R.layout.salesmanlist, outlets, new String[] { "name", "complete", "incomplete" }, new int[] { R.id.smListName, R.id.smListCompleted, R.id.smListNotCompleted })); db.close(); 

No estoy usando un adaptador personalizado. Ahora quiero capturar el clic de smListNotCompleted y smListCompleted junto con la posición de la fila.

Gracias

Usted tendrá que usar un nuevo adaptador. Trate de entender el concepto detrás de esto antes de implementar esto:

 class YourNewAdapter extends SimpleCursorAdapter { public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(id, null); btn = (Button)v.findViewById(R.id.yourbutton); btn.setOnClickListener(YourActivity.this); btn.setId(position); btn.setText("sometext"); v.setLongClickable(true); } return v; } } 

Y en su actividad

 public void onClick(View v) { if(v.getId() == R.id.yourbutton id) { // do what you want you can also put this on click listener in the getview fn } } 

Utilicé un evento de clic en el listadapter y coloqué el id de posición en la etiqueta de botones

 Button editButton = view.FindViewById(Resource.Id.editPaymentButton_2) as Button; editButton.Tag = position; editButton.Clickable = true; editButton.Click += editButton_Click; 

este es el evento I atado al evento en GetView

 void editButton_Click(object sender, EventArgs e) { if (editButtonClicked) { return; } editButtonClicked = true; var button = sender as Button; if (button == null) return; //OnEdit((Entities.PaymentTemplate)GetItem((int)button.Tag)); } 

Puesto que se requieren eventos de clic tanto para los botones de la lista personalizada con 2 botones; tendrá que crear un adaptador de lista personalizada en el que puede agregar eventos de clic para los dos botones de forma separada y obtendrá la posición de clic también.

  • ArrayIndexOutOfBoundsException cuando se utiliza ListAdapter
  • Cómo obtener un Inflater Layout dado un contexto?
  • ListView de Android con casilla de verificación: desactiva automáticamente
  • Vista personalizada falta constructor utilizado por las herramientas para el adaptador
  • Cómo utilizar el adaptador de lista de Firebase
  • Android ListView con múltiples selecciones y adaptadores personalizados
  • Cómo mostrar que un listView está vacío con un adaptador de lista personalizado
  • ListView addHeaderView hace que la posición aumente en uno?
  • ListAdapter Filtro que no sea el uso de cadenas?
  • ¿Los servicios del sistema no están disponibles para las actividades antes de crear?
  • Llamar notifyDataSetChanged en un ListAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.