以前は、ユーザーの検索クエリを処理するためEditText
のを持っていました。onTextChangedListener
これは次のように行われました。
ed.addTextChangedListener(new TextWatcher(){
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
textLength = ed.getText().length();
list.clear();
isPresent = initIsPresentArray();
for (int i = 0; i < tempList.length; i++) {
for (int j = 0; j < (tempList[i].length() - (textLength - 1)); j++) {
if (textLength <= tempList[i].length()) {
if (isPresent[i] == false) {
if (ed.getText()
.toString()
.equalsIgnoreCase(
(String) tempList[i]
.subSequence(
j,
(j + textLength)))) {
list.add(tempCaseList.get(i));
isPresent[i] = true;
}
}
}
}
if (list.size() == 0) {
error.setText(getResources().getString(R.string.notFound));
v.setVisibility(View.GONE);
} else {
error.setText("");
v.setVisibility(View.VISIBLE);
}
lv.setAdapter(new CustomAdapter(History.this, list));
}
}
});
この厄介なコードは、ユーザーが検索対象を入力している間、その場でListViewを更新します。で非常にうまく機能しますEditText
。今、私は自分のプロジェクトにActionBarSherlockを実装していて、SearchWidgetを使用したいと思っています。
メニューを膨らませました:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.actionbarmenu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView)menu.findItem(R.id.searchCases).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
searchView.setSubmitButtonEnabled(true);
return true;
}
OnTextChangedListener
これに同じ動作をどのように適用できますSearchView
か?出来ますか?