Search code examples
androidandroid-listviewandroid-arrayadapter

Remove an item from my CustomArrayAdapter


Firstly, sorry for my english, I am french.

So, I have a CustomArrayAdapter (ReservationAdapter), and I would remove an item from this class. I have tried many things, but they didn't work.

public class ReservationAdapter extends ArrayAdapter<Reservation> {
public ReservationAdapter(Context context, ArrayList<Reservation> reservations) {
    super(context, 0, reservations);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    Reservation reservation = getItem(position);

    // Check if an existing view is being reused, otherwise inflate the view
    ReservationHolder holder;
    if (convertView == null) {
        holder = new ReservationHolder();

        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.reservation_fragment, parent, false);

        holder.date = (EditText) convertView.findViewById(R.id.dateReserv);
        holder.imgDelete = (ImageButton) convertView.findViewById(R.id.less);

        convertView.setTag(holder);
    } else {
        holder = (ReservationHolder) convertView.getTag();
    }

    // Populate the data into the template view using the data object
    holder.date.setText(reservation.date);
    holder.imgDelete.setOnClickListener(deleteReservListener);

    // Return the completed view to render on screen
    return convertView;
}

private View.OnClickListener deleteReservListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Where I try to remove an item
        notifyDataSetChanged();
    }
};

public static class ReservationHolder {
    private EditText date;
    private ImageButton imgDelete;
}

Solution

  • You have to remove the item from reservations and then call notifyDataChanged().

    Before of all you have to implement a OnItemClickListener on your ListView (outside of your adapter, of course):

            AdapterView.OnItemClickListener itemCLickListener = new AdapterView.OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                reservations.remove(i);
                ((ReservationAdapter)listView.getAdapter()).notifyDataChanged();
            }
        }
    

    e voilà