ListView中的EditText作为该列表的过滤器:焦点问题

时间:2013-01-11 13:57:19

标签: android listview filter

在我的活动中,我有一个带有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的焦点?

1 个答案:

答案 0 :(得分:0)

getListView().addHeaderView(new EditText(this));

这满足了这些需求。