Android OnTextChangeListener不工作
我有一个可折叠的搜索框。我想捕获文本更改事件并在列表上执行搜索。但我无法捕获ContextChanged事件 菜单资源:Android OnTextChangeListener不工作,android,events,menu,actionbarsherlock,Android,Events,Menu,Actionbarsherlock,我有一个可折叠的搜索框。我想捕获文本更改事件并在列表上执行搜索。但我无法捕获ContextChanged事件 菜单资源: <item android:id="@+id/action_search" android:icon="@drawable/abs__ic_search" android:title="Search" android:showAsAction="always" android:iconifiedByDefault="fal
<item android:id="@+id/action_search"
android:icon="@drawable/abs__ic_search"
android:title="Search"
android:showAsAction="always"
android:iconifiedByDefault="false"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"/>
import com.actionbarsherlock.view.MenuItem;
public class FromPageActivity extends SherlockListActivity {
EditText search;
//more code here
.
.
.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
search(item);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void search(MenuItem item){
search = (EditText) item.getActionView();
search.addTextChangedListener(filterTextWatcher);
search.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
private TextWatcher filterTextWatcher = new TextWatcher(){
public void afterTextChanged(Editable s)
{
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
Toast.makeText(FromPageActivity.this, "changed", Toast.LENGTH_LONG).show();
}
};
}
我遗漏了什么?尝试使用
com.actionbarsherlock.view.MenuItem
而不是MenuItem
作为搜索和onOptionMenuItemSelected
方法中的参数
您还可以尝试使用SearchView.OnQueryTextListener
检测文本更改,例如:
public boolean onCreateOptionsMenu(Menu menu)
{
getSupportMenuInflater().inflate(R.menu.menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
if (null != searchView )
{
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
}
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener()
{
public boolean onQueryTextChange(String newText)
{
// this is your adapter that will be filtered
adapter.getFilter().filter(newText);
return true;
}
public boolean onQueryTextSubmit(String query)
{
// this is your adapter that will be filtered
adapter.getFilter().filter(query);
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return super.onCreateOptionsMenu(menu);
}
如果我在片段中并使用自定义列表适配器,`adapter.getFilter().filter(newText);`工作原理