在我的活动中,我有一个带有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;
}
});
}
}
};
列表的过滤按预期进行。但有时在文本更改后,listview的第一行会聚焦:在这种情况下,搜索框的单元格而不是EditText。如果用户想要继续过滤列表,他首先必须再次选择EditText。
我不想关闭选项以将细胞聚焦在列表视图中以获得视觉效果。
在过滤时有什么方法可以避免失去EditText的焦点?
答案 0 :(得分:0)
getListView().addHeaderView(new EditText(this));
这满足了这些需求。