我有一個列表視圖,它有一個textview和一個圖像按鈕(刪除)。當我點擊圖像按鈕時,行被刪除,列表視圖得到更新。刪除自定義ListView中的行
一切工作正常,但問題是當列表視圖中有更多的一行,刪除一行後,我不能刪除另一個,因爲位置值不合適。
說清楚,例如:在列表視圖中有3行。
- 我點擊第一行刪除(位置值是0),它就會被刪除,列表視圖更新。
所以現在有兩排,
- 我再次點擊第一行,並無法刪除。(bcoz位置值是沒有得到與列表視圖更新,實際上現在它的位置值應該是0,而是其表示圖1及有時2)
這是我的代碼,
CustomListView.class
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
DataFields rowItems = (DataFields) getItem(position);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.home_field_row, null);
holder = new ViewHolder();
holder.dataFields = items.get(position);
holder.mName = (TextView) convertView
.findViewById(R.id.hmFieldName);
holder.mDeleteImage = (ImageView) convertView
.findViewById(R.id.hmFieldDeleteImage);
holder.mDeleteImage.setTag(position);
holder.mDeleteImage
.setOnClickListener(new ImageView.OnClickListener() {
@Override
public void onClick(final View v) {
Log.d("POSITION****", String.valueOf(position));
final Integer index = (Integer) v.getTag();
holder.dataFields = items.get(position);
value = holder.dataFields.getId();
int status = dbHandler
.deleteField(holder.dataFields);
if (status != 0) {
items.remove(index.intValue());
notifyDataSetChanged(); //ListView is getting updated but not the position values of rows
} else {
Toast.makeText(getContext(),
"Failed to delete !",
Toast.LENGTH_SHORT).show();
}
}
});
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.mName.setText(rowItems.getName());
return convertView;
}
任何形式的幫助,非常感謝。謝謝 !
編輯
正如大家說的,我做了以下的變化,但仍然是位置值不會得到更新...
holder.dataFields = items.get(position);
DataFields obj = items.get(position);
value = holder.dataFields.getId();
int status = dbHandler.deleteField(holder.dataFields);
if (status != 0) {
items.remove(index.intValue());
HomeActivity.mAdapter.remove(obj); //I also tried items.remove(obj);
HomeActivity.mAdapter.notifyDataSetChanged();
} else {
Toast.makeText(getContext(), "Failed to delete !", Toast.LENGTH_SHORT).show();
}
我這樣做,看在我的代碼註釋行。刪除項目後,我使用notifyDataSetChanged()更新了列表視圖。 – 2013-02-12 11:53:07
我更新了我的回答 – 2013-02-12 11:56:22
我沒有得到你想要解釋的是什麼。你能爲我提供代碼行嗎? – 2013-02-12 12:02:58