我有一个包含ListView的DialogFragment,使用自定义适配器连接到ListView。该列表显示了许多条目,每条记录都有一个EditText用于输入数量。
当其中任何一个数量发生改变时,我需要更新适配器内的数组,这意味着将EditText与数组中的特定元素链接起来。我使用EditText的getTag / setTag方法来完成此操作。数组中的项目由两个属性唯一标识:LocationID和RefCode 这些存储在我的TagData对象中,并在getView()点设置。不幸的是,我尝试在值更改后使用EditText.getTag(),但无济于事。
问题在于我无法在afterTextChanged方法中访问EditText。
这是我的Adapter的getView()方法:
上面我创建了一个
根据这个帖子,
这让我陷入了困境。我该如何在afterTextChanged方法中访问
当其中任何一个数量发生改变时,我需要更新适配器内的数组,这意味着将EditText与数组中的特定元素链接起来。我使用EditText的getTag / setTag方法来完成此操作。数组中的项目由两个属性唯一标识:LocationID和RefCode 这些存储在我的TagData对象中,并在getView()点设置。不幸的是,我尝试在值更改后使用EditText.getTag(),但无济于事。
问题在于我无法在afterTextChanged方法中访问EditText。
这是我的Adapter的getView()方法:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ItemModel item = (ItemModel) getItem(i);
TagData tagData = new TagData();
tagData.setLocationID(item.getLocationID());
tagData.setRefCode(item.getRefCode());
EditText txtQuantity = ((EditText) view.findViewById(R.id.txtQuantity));
txtQuantity.setTag(tagData);
txtQuantity.setText(String.valueOf(item.getQtySelected()));
txtQuantity.addTextChangedListener(this);
...
return view;
}
上面我创建了一个
TagData
对象,并使用setTag()
将其与EditText
绑定。我还在getView()
中挂接了一个addTextChangedListener
。对于此监听器,afterTextChanged
方法如下:@Override
public void afterTextChanged(Editable editable) {
EditText editText = (EditText)context.getCurrentFocus(); // This returns the WRONG EditText!?
// I need this
TagData locAndRefcode = (TagData) editText.getTag();
}
根据这个帖子,
Activity.getCurrentFocus()
应该返回相关的EditText
,但实际上它返回的是DialogFragment后面的EditText
。这让我陷入了困境。我该如何在afterTextChanged方法中访问
EditText
的标记?