ListView con añadir y eliminar botones en cada fila en android

Estoy desarrollando una aplicación de Android en la que he hecho una ListView. Tengo que agregar 2 botones con cada fila en ListView. Estos 2 botones son Agregar y Borrar. Cuando el usuario selecciona uno de los botones, algunas acciones deben tomarse. ¿Cómo puedo hacerlo?

Primero tendrá que crear un xml de diseño personalizado que represente un solo elemento en su lista. Usted agregará sus dos botones a esta disposición junto con cualquier otro artículo que desee exhibir de su lista.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/list_item_string" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:paddingLeft="8dp" android:textSize="18sp" android:textStyle="bold" /> <Button android:id="@+id/delete_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:text="Delete" /> <Button android:id="@+id/add_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/delete_btn" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:text="Add" /> </RelativeLayout> 

A continuación, tendrá que crear una clase personalizada ArrayAdapter que utilizará para inflar su diseño xml, así como manejar sus botones y en eventos de clic.

 public class MyCustomAdapter extends BaseAdapter implements ListAdapter { private ArrayList<String> list = new ArrayList<String>(); private Context context; public MyCustomAdapter(ArrayList<String> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int pos) { return list.get(pos); } @Override public long getItemId(int pos) { return list.get(pos).getId(); //just return 0 if your list items do not have an Id variable. } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.my_custom_list_layout, null); } //Handle TextView and display string from your list TextView listItemText = (TextView)view.findViewById(R.id.list_item_string); listItemText.setText(list.get(position)); //Handle buttons and add onClickListeners Button deleteBtn = (Button)view.findViewById(R.id.delete_btn); Button addBtn = (Button)view.findViewById(R.id.add_btn); deleteBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something list.remove(position); //or some other task notifyDataSetChanged(); } }); addBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something notifyDataSetChanged(); } }); return view; } } 

Por último, en su actividad puede instanciar su clase personalizada ArrayAdapter y establecerla en su lista.

 public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_activity); //generate list ArrayList<String> list = new ArrayList<String>(); list.add("item1"); list.add("item2"); //instantiate custom adapter MyCustomAdapter adapter = new MyCustomAdapter(list, this); //handle listview and assign adapter ListView lView = (ListView)findViewById(R.id.my_listview); lView.setAdapter(adapter); } 

¡Espero que esto ayude!

En evento de clic de botón de eliminación

 public void delete(View v){ ListView listview1; ArrayList<E> datalist; final int position = listview1.getPositionForView((View) v.getParent()); datalist.remove(position); myAdapter.notifyDataSetChanged(); } 
 public class UserCustomAdapter extends ArrayAdapter<User> { Context context; int layoutResourceId; ArrayList<User> data = new ArrayList<User>(); public UserCustomAdapter(Context context, int layoutResourceId, ArrayList<User> data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; UserHolder holder = null; if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new UserHolder(); holder.textName = (TextView) row.findViewById(R.id.textView1); holder.textAddress = (TextView) row.findViewById(R.id.textView2); holder.textLocation = (TextView) row.findViewById(R.id.textView3); holder.btnEdit = (Button) row.findViewById(R.id.button1); holder.btnDelete = (Button) row.findViewById(R.id.button2); row.setTag(holder); } else { holder = (UserHolder) row.getTag(); } User user = data.get(position); holder.textName.setText(user.getName()); holder.textAddress.setText(user.getAddress()); holder.textLocation.setText(user.getLocation()); holder.btnEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("Edit Button Clicked", "**********"); Toast.makeText(context, "Edit button Clicked", Toast.LENGTH_LONG).show(); } }); holder.btnDelete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("Delete Button Clicked", "**********"); Toast.makeText(context, "Delete button Clicked", Toast.LENGTH_LONG).show(); } }); return row; } static class UserHolder { TextView textName; TextView textAddress; TextView textLocation; Button btnEdit; Button btnDelete; } } 

Hey Por favor, eche un vistazo aquí-

Tengo la misma respuesta aquí en mi blog ..

  • La vista de lista establece un selector de rizado personalizado
  • Android WebView dentro de los problemas de eventos de ListView onclick
  • Color de fondo del elemento del cajón de navegación para el elemento seleccionado
  • ¿Cuándo usar carga perezosa y cuándo no usar.?
  • La URL no se puede emitir a String
  • Actualizar el valor del elemento ListView en Android
  • Selección múltiple en ListView personalizado con CAB
  • Cómo aplicar la animación de diseño de Android sólo a los niños por encima de un cierto índice?
  • ¿Cómo aplicar una transparencia (enfoque?) Al pulsar cualquier elemento (como lo hace Google)?
  • Android java.lang.ClassCastException: android.widget.LinearLayout no se puede convertir en android.widget.TextView
  • Acceso a @android: id / list ListView desde el código
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.