从我的CustomArrayAdapter中删除一个项目

时间:2015-02-10 13:11:52

标签: android android-listview android-arrayadapter

首先,对不起我的英语,我是法国人。

所以,我有一个CustomArrayAdapter(ReservationAdapter),我会从这个类中删除一个项目。我尝试了很多东西,但它们没有用。

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

3 个答案:

答案 0 :(得分:0)

您必须从reservations中删除该项目,然后拨打notifyDataChanged()

在此之前,您必须在OnItemClickListener上实施ListView(当然,在您的适配器之外):

        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();
        }
    }
电子邮件

答案 1 :(得分:0)

它有效,merci! 与此同时,我仍然在寻找解决方案,并找到了这个:

holder.date.setText(reservation.date);
    holder.imgDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            remove(reservation);
            notifyDataSetChanged();
        }
    });

我只是将OnClickListener放入GetView方法中。 再次感谢 ! :)

答案 2 :(得分:0)

在您的ReservationHolder中添加位置可变量,并将construcror添加为:

public ReservationHolder(int position)
{
    this.position = position;
}

public int getCurrentPosition()
{
    return position;
}

并在getView()中:ReservationHolder holder = new ReservationHolder(position);

更改方法:

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

为:

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

    ReservationHolder holder = (ReservationHolder)v.getTag();
    reservations.remove(holder.getCurrentPosition());

    notifyDataSetChanged();
}
};
相关问题