0
내 활동에 customAdapter가있는 ListView가 있습니다. 해당 ListView의 첫 번째 항목은 EditText입니다. 이 EditText에는 목록이 필터링되도록하는 TextWatcher가 있습니다.ListView의 EditText를 해당 목록의 필터로 사용 : 포커스 문제
search.addTextChangedListener(textWatcher);
search.setOnFocusChangeListener(focusListener);
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(getContext() instanceof ListActivity) {
ListAdapter adapter = ((ListActivity)getContext()).getListAdapter();
if(adapter instanceof TCListObjectAdapter) {
requestfocus = true;
((TCListObjectAdapter) adapter).getFilter().filter(s);
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) { }
};
OnFocusChangeListener focusListener = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus && requestfocus){
search.post(new Runnable() {
@Override
public void run() {
search.requestFocus();
requestfocus = false;
}
});
}
}
};
목록 필터링은 예상대로 발생합니다. 그러나 때때로 텍스트가 변경된 후에 listview의 첫 번째 행이 초점을 맞 춥니 다.이 경우 검색 상자의 셀이지만 EditText는 아닙니다. 사용자가 목록을 계속 필터링하려면 먼저 EditText를 다시 선택해야합니다.
비주얼 효과를 위해 listview에서 셀을 포커스하는 옵션을 해제하고 싶지 않습니다.
필터링하는 동안 EditText의 포커스를 잃지 않도록하는 방법은 있습니까?
ListView 내에이 EditText가 있어야합니까? ListView에서 분리 할 수 있었습니까? 아마도 이것이 포커스 유지에 도움이되었을 것입니다. – harism
ListView 내부에있을 필요는 없습니다. 그러나 목록이 스크롤 될 때 화면을 벗어나야합니다. – ePeace
시간을 낭비하게되어서 죄송합니다. listview.addHeaderView (View v)가 이러한 요구를 충족시켜주기 때문에 바쁜 질문이었습니다. – ePeace