リストビューがあり、テキストビューと画像ボタン(削除)があります。画像ボタンをクリックすると、行が削除され、リストビューが更新されます。
すべて正常に機能していますが、問題は、リストビューに複数の行がある場合、1つの行を削除した後、位置の値が適切でないために他の行を削除できないことです。
明確にするために、例えば:リストビューには3行あります。
- 最初の行をクリックして削除し(位置の値は0)、削除されてリストビューが更新されます。
これで2つの行があります
- もう一度1行目をクリックしましたが、削除できませんでした(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();
}