我有一個ListView
其中每個項目包含多個EditTexts
。我正在定義一個比例尺,因此其中一個EditTexts依賴於上述項目中的EditText。在下面的示例中,B設置爲與A相同的值,當時A已被編輯。因此,用戶實際上並未使用右欄。如何在列表項中的EditText中更新ListView而不失焦點? (Android)
我能聽事件一個和更新乙,並相應地調用notifyDataSetChanged()
,但後來我失去了我的EditText的焦點,ListView控件重繪。
底線,我要的是:
編輯字段一個,當我再現場挖掘Ç,我想一個的價值申請到B,我想專注於C。
這是我關注的「關注C」部分。
p.s.實際上,該行上有另一個EditText,因此焦點並不總是會出現在具有A和C的列上。
編輯:這是我的適配器的getItemId()
方法,以幫助回答@ aniv的評論。
@Override
public Object getItem(int arg0) {
return arg0;
}
EDIT_2:覆蓋hasStableIds()
返回true後,它的偉大工程,當我從一個去的第三列中的其他項目,而不是當我從啓程到Ç。我認爲我的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 {
}
}
}
它指的是在我的活性的功能(使用的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位置和內容在更新的基礎數據相同的位置。以下是我在同一列中更改焦點時發生的情況的一瞥。很奇怪。
您的適配器是否有穩定的ID? – alanv 2014-10-19 23:41:06
@alanv你是什麼意思的穩定ID?我的適配器擴充了一個佈局xml,其中包含唯一標識的視圖。 – NSouth 2014-10-19 23:42:21
您的適配器是否從hasStableIds()返回true並從getItemId(int)返回一致的值? – alanv 2014-10-19 23:43:55