在ArrayAdapter <integer> </integer>中使用remove()方法

时间:2015-04-21 17:19:17

标签: android android-arrayadapter

我有一个ListView的项目。每个项目都包含一个TimeTextView(它只是一个以我想要的方式显示时间的简单类),另一个TextView和一个用于从ListView中删除项目的Button。为此我扩展了类ArrayAdapter并重写了方法getView(),如下所示:

public class TimeListAdapter extends ArrayAdapter<Integer> {

private Context applicationContext = null;
private int layout = 0;

private class ViewHolder {
    public TimeTextView timeText;
    public TextView position;
    public ImageButton removeButton;
}

TimeListAdapter(Context context, int resource, ArrayList<Integer> objects) {
    super(context, resource, objects);
    applicationContext = context;
    layout = resource;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final Integer newTime = getItem(position);
    ViewHolder holder = null;
    LayoutInflater inflater = (LayoutInflater) applicationContext.
            getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = inflater.inflate(layout, null);
        holder = new ViewHolder();
        holder.timeText = (TimeTextView) convertView.findViewById(R.id.time_text);
        holder.position = (TextView) convertView.findViewById(R.id.position);
        holder.removeButton = (ImageButton) convertView.findViewById(R.id.remove_button);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.timeText.setTime(newTime);
    holder.position.setText((new Integer(position + 1)).toString() + ".");
    holder.removeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            remove(newTime);
        }
    });

    return convertView;
}
}

现在我的问题是,如果你把两个具有相同值的项目,即使你点击了第二个项目的按钮,remove()方法的调用也会自动删除第一个。例如,如果列表中有值(12,16,12),并且单击按钮删除第三个项目,则第一个项目将被删除。

我到目前为止找到的唯一解决方案是创建一个IntegerWrapper类,它只包含一个Integer作为公共属性。但我发现在我的其余代码中使用它非常不方便。

有没有人有更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

执行以下操作

  • 在Activity类中注册onItemClickListener这将为您提供一个onItemClick方法,该方法执行以下操作

            arrayAdapter.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
               objects.remove(position);
            arrayAdapter.notifyDataSetChanged();
            }
        });
    

这将删除您想要的位置。