在我的活动中,我有一个带有 customadapter 的 ListView。该 ListView 中的第一项是 EditText。这个 EditText 有一个 TextWatcher 导致列表被过滤。
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;
}
});
}
}
};
列表的过滤按预期进行。但有时在文本更改后,列表视图的第一行成为焦点:在这种情况下,搜索框的单元格而不是 EditText。如果用户想要继续过滤列表,他首先必须再次选择 EditText。
我不想关闭在列表视图中聚焦单元格的选项以获得视觉效果。
有什么方法可以避免在过滤时失去 EditText 的焦点?