私のアクティビティでは、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のフォーカスを失うことを回避する方法はありますか?