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 に答える