我有带有自定义适配器的旅行者列表,其中包含两个 EditText - edtFirstName 和 edtLastName。我希望当用户输入文本时将更改保存到列表中,并且当单击下一个按钮时将此列表发送到另一个活动。
My code:
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;
}
}
例如列表项目列表包含 5 个项目。当我编辑 2-4 个元素时一切正常,但是当我编辑第一个或最后一个元素时,编辑值分配给列表中的所有元素。在调试器中我看到了这个方法afterTextChanged
使用不同的值调用 5 次position
。
如何修复它?
in getView方法、参数position给出新创建的位置子视图,而不是单击的 childView 的位置。
使用它来获得正确的位置:
final int actual_position = myList.getPositionForView((View) v.getParent());
in onClick(View v);
of the onClickListener
任何视图。在你的情况下,你必须实施onTextChanged 侦听器对于该 EditText。
here:
myList是列表视图
v是您单击的视图,在本例中是父视图 (myList) 的子视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)