我有一个
我能够监听
底线是,我想要的是:编辑字段
最后,我遇到了困难的部分是"焦点转移到
我使用EditText位置和内容同时更新底层数据的相同位置。以下是在同一列中更改焦点时发生的情况。非常奇怪。
图片描述:输入文本框中输入内容后,再在同一列中移动光标,原来填写的内容被清空了。
ListView
,每个条目都包含多个EditText
。我正在定义一个比例,因此其中一个EditText
依赖于上面一项的EditText
。在下面的示例中,当编辑A
时,B被设置为与A
相同的值。因此,用户实际上不使用右列。我能够监听
A
中的事件并更新B
,然后相应地调用notifyDataSetChanged()
,但是随着ListView
的重绘,我失去了我的EditText
的焦点。底线是,我想要的是:编辑字段
A
,然后当我点击字段C
时,我希望A
的值应用于B
,并且我希望焦点转移到C
。最后,我遇到了困难的部分是"焦点转移到
C
"。
p.s. 实际上还有另一个EditText
在行上,因此焦点不会总是移动到具有A和C的列。
编辑:这是我的适配器的getItemId()
方法,以帮助回答@aniv的评论。
@Override
public Object getItem(int arg0) {
return arg0;
}
编辑2:在覆盖hasStableIds()
以返回true后,当我从A转到另一个项目中的第三列时,它可以很好地工作,但是当我从A转到C时却不行。我认为我的onFocusChange
覆盖正在搞砸某些东西,因为它只在该列中更改焦点时表现奇怪(它们共享同一个onFocusChange
方法)。这是我的自定义onFocusChangeListener。
private class MyFocusChangeListener implements View.OnFocusChangeListener{
private EditText et;
private ScaleItem item;
private Integer pos;
private MyFocusChangeListener(ScaleItem item, Integer pos){
this.item = item;
this.pos = pos;
}
@Override
public void onFocusChange(View v, boolean hasFocus){
if(!hasFocus){
et = (EditText) v;
Activity_EditCourseGPA a = (Activity_EditCourseGPA) activity;
a.updateMaxOnTextChange(item, pos, et.getText().toString());
} else {
}
}
}
我在活动中使用的it函数(用于使用EditText字段更新底层数据)....
public void updateMaxOnTextChange(ScaleItem item, Integer pos, String str){
if(pos < scaleItems.size()){
scaleItems.get(pos + 1).setMax(Double.valueOf(str));
scaleListAdapter.notifyDataSetChanged();
}
}
我使用EditText位置和内容同时更新底层数据的相同位置。以下是在同一列中更改焦点时发生的情况。非常奇怪。
图片描述:输入文本框中输入内容后,再在同一列中移动光标,原来填写的内容被清空了。
hasStableIds()
返回 false。我认为我可以得到一致的getItemId()
值--我已经在上面发布了我的代码。这是什么意思,它如何影响我正在尝试做的事情? - NSouth