在 ArrayAdapter<Integer> 中使用 remove() 方法
Use of remove() method in ArrayAdapter<Integer>
我有一个项目列表视图。每个项目都包含一个 TimeTextView(它只是一个按我想要的方式显示时间的简单 class)、另一个 TextView 和一个用于从 ListView 中删除项目的按钮。为此,我扩展了 class 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 class,它只包含一个 Integer 作为 public 属性。但是我发现在我的其余代码中使用起来非常不方便。
谁有更优雅的解决方案?
执行以下操作
在你里面注册 onItemClickListener Activity class 这会给你一个方法 onItemClick 在那个方法中做以下事情
arrayAdapter.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
objects.remove(position);
arrayAdapter.notifyDataSetChanged();
}
});
这将删除您想要的职位。
我有一个项目列表视图。每个项目都包含一个 TimeTextView(它只是一个按我想要的方式显示时间的简单 class)、另一个 TextView 和一个用于从 ListView 中删除项目的按钮。为此,我扩展了 class 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 class,它只包含一个 Integer 作为 public 属性。但是我发现在我的其余代码中使用起来非常不方便。
谁有更优雅的解决方案?
执行以下操作
在你里面注册 onItemClickListener Activity class 这会给你一个方法 onItemClick 在那个方法中做以下事情
arrayAdapter.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { objects.remove(position); arrayAdapter.notifyDataSetChanged(); } });
这将删除您想要的职位。