0
我有一個ListView的項目。每個項目都包含一個TimeTextView(它只是一個顯示時間的簡單類,我想要的方式),另一個TextView和一個Button來從ListView中移除項目。對於我擴展的類ArrayAdapter和重寫方法getView()像這樣:在ArrayAdapter中使用remove()方法<Integer>
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作爲公共屬性。但是我發現在我的其他代碼中使用它非常不方便。
有沒有人有更優雅的解決方案?
好吧,但我只想當我點擊按鈕,而不是整個項目時,這種行爲......雖然這幫助了我很多。解決方案是將TimeListAdapter類作爲活動的內部類。而不是我寫的onClick方法的代碼,你只需把你的onItemClick的代碼。謝謝 :) – Kadoc