2つのEditText(edtFirstNameとedtLastName)で構成されるカスタムアダプターを使用する旅行者のリストがあります。ユーザーがテキストを入力したときに変更をリストに保存し、次のボタンをクリックしてこのリストを別のアクティビティに送信したい。
私のコード:
public class TravellersAdapter extends BaseAdapter {
private List<Traveler> itemsList;
private LayoutInflater inflater;
private Activity context;
public TravellersAdapter(Activity context, List<Traveler> itemsList) {
super();
this.itemsList = itemsList;
this.context = context;
inflater = LayoutInflater.from(context);
}
public int getCount() { return itemsList.size(); }
public Object getItem(int i) { return itemsList.get(i); }
public View getView(final int position, View view, ViewGroup viewGroup) {
if (view == null) {
view = inflater.inflate(R.layout.traveller_item, null);
}
Traveler currentItem = (Traveler) getItem(position);
EditText firstNameView = (EditText) view.findViewById(R.id.edtFirstName);
firstNameView.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable editable) {
currentItem.setFirstName(editable.toString());
}
});
return view;
}
}
たとえば、リストitemsListは5つのアイテムで構成されます。2〜4個の要素を編集するとすべて問題ありませんが、最初または最後の要素を編集すると、リスト内のすべての要素に割り当てられた値が編集されます。dubuggerで、メソッドが.afterTextChanged
の異なる値で5回呼び出されるのを見ましたposition
。それを修正する方法は?