0

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

4

1 回答 1

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

这满足了这些需求。

于 2013-01-11T14:33:24.267 回答