I have a list view, it has a textview and a image button(delete). When I click the image button the row gets deleted and the list view gets updated.
Everything is working fine, but the problem is when there are more that one row in the list view, after deleting one row, im not able to delete the other because the position value is not appropriate.
To put it clear, for eg: There are 3rows in the listview.
- I clicked on the first row to delete( position value is 0), it gets deleted and the listview is updated.
so now there are two rows,
- Again I clicked on 1st row and it failed to delete.(bcoz the position value is not getting updated with listview, actually now its position value should be 0, but instead its showing 1 and sometimes 2)
Here is my code,
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;
}
Any kind of help is much appreciated. Thanks !
Edited
As you all said, I did the following changes but still the position value is not getting updated...
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();
}