ListView
각 항목에 복수 EditTexts
가 들어 있습니다. 저울을 정의하고 있으므로 EditText 중 하나는 위의 항목에있는 EditText에 종속됩니다. 아래 예제에서 B은 A과 같으며, A을 편집 할 때 값으로 설정됩니다. 따라서 사용자는 실제로 오른쪽 열을 사용하지 않습니다.목록 항목의 EditText에서 포커스를 잃지 않고 ListView를 업데이트하려면 어떻게해야합니까? (안드로이드)
나는 에서 이벤트를 수신하고 B를 업데이트하고 그에 따라 notifyDataSetChanged()
를 호출 할 수있어,하지만 ListView를 다시 그릴로 나는 내 글고의 초점을 잃게됩니다.
편집 필드 내가 다음 필드 에 C을 누를 때, 나는 적용 의 값을 싶습니다
결론은, 내가 원하는 것입니다 B으로 이동하고 C으로 이동하는 데 집중하고 싶습니다.
문제가있는 것은 "C 포커스입니다"부분입니다.
p.s. 실제로 행에 다른 EditText가 있으므로 포커스가 항상 A 및 C가있는 열로 이동하지는 않습니다.
편집 : @ aniv의 의견에 도움을주기 위해 어댑터의 getItemId()
메서드가 있습니다.
@Override
public Object getItem(int arg0) {
return arg0;
}
EDIT_2 : true를 반환하는 hasStableIds()
를 오버라이드 (override) 한 후, 내가 다른 항목에서 세 번째 열에 에서 갈 때 좋은 작품,하지만 내가 에서 갈 때에 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 {
}
}
}
내 활동을 참조하는 함수
public void updateMaxOnTextChange(ScaleItem item, Integer pos, String str){
if(pos < scaleItems.size()){
scaleItems.get(pos + 1).setMax(Double.valueOf(str));
scaleListAdapter.notifyDataSetChanged();
}
}
난에서 기본 데이터를 업데이트 글고 위치 및 콘텐츠 사용 .... (기본 데이터를 업데이트 글고 필드를 사용) 같은 위치. 동일한 칼럼 내에서 포커스를 변경하면 어떻게 될지 한 번 볼 수 있습니다. 엄청 이상해.
어댑터에 안정적인 ID가 있습니까? – alanv
@alanv 안정 ID로 정확히 무엇을 의미합니까? 내 어댑터는 고유하게 식별 된보기를 포함하는 레이아웃 xml을 확장합니다. – NSouth
어댑터가 hasStableIds()에서 true를 반환하고 getItemId (int)에서 일관된 값을 반환합니까? – alanv