我有一个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作为公共属性。但我发现在我的其余代码中使用它非常不方便。
有没有人有更优雅的解决方案?
答案 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();
}
});
这将删除您想要的位置。