gpt4 book ai didi

android - 自定义 ListView 适配器。 TextChangedListener 调用了错误的 EditText

转载 作者:行者123 更新时间:2023-11-29 15:26:15 25 4
gpt4 key购买 nike

我有带有自定义适配器的旅行者列表,其中包含两个 EditText - edtFirstName 和 edtLastName。我希望当用户输入文本时将更改保存到列表,并在单击下一个按钮时将此列表发送到另一个 Activity 。

我的代码:

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;
}
}

例如 List itemsList 包含 5 个项目。当我编辑 2-4 个元素时一切正常,但是当我编辑第一个或最后一个元素时,编辑值分配给列表中的所有元素。在 dubugger 中,我看到该方法 afterTextChanged 使用不同的 position 调用了 5 次。如何解决?

最佳答案

getView方法中,参数position给出了新创建的childView的位置,而不是被点击的childView的位置。

使用它来获得正确的位置:

final int actual_position = myList.getPositionForView((View) v.getParent());

在任何 View 的 onClickListeneronClick(View v); 中。在您的情况下,您必须为该 EditText 实现 onTextChangedListener

这里:

myList 是 ListView

v 是您点击的 View ,在本例中是父 View (myList) 的 subview 。

关于android - 自定义 ListView 适配器。 TextChangedListener 调用了错误的 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com