我想在ActionbarSherlock ver 4.2中搜索“搜索”。 ActionbarSherlock已经以最新版本向后移植了SerchView。
我在onCreateOptionsMenu
SherlockListFragment
中有以下代码
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Place an action bar item for searching.
SearchView searchView = new SearchView(getSherlockActivity().getSupportActionBar().getThemedContext());
searchView.setQueryHint("Search Friends");
searchView.setIconified(true);
menu.add(Menu.NONE, Menu.FIRST, Menu.FIRST, "Refresh")
.setIcon(R.drawable.ic_action_refresh)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, Menu.FIRST + 1, Menu.FIRST + 1, "Search")
.setIcon(R.drawable.abs__ic_search)
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
以及
中的以下代码@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Menu.FIRST:
Toast.makeText(getActivity(),"FIRST", Toast.LENGTH_SHORT).show();
break;
case Menu.FIRST + 1:
Toast.makeText(getActivity(),"FIRST+1", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
当我点击ABS中的“刷新”按钮但是当我点击“搜索”它没有响应时,我得到Toast它会扩展并转换为EditText但是Toast不会被触发。
我的问题
如何将Actionbar中的“搜索”与ABS集成?
答案 0 :(得分:11)
有效。
为了实现SearchView,我们需要像这样实现回调接口
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
/**
* Called when the user submits the query. This could be due to a key press on the
* keyboard or due to pressing a submit button.
* The listener can override the standard behavior by returning true
* to indicate that it has handled the submit request. Otherwise return false to
* let the SearchView handle the submission by launching any associated intent.
*
* @param newText the query text that is to be submitted
* @return true if the query has been handled by the listener, false to let the
* SearchView perform the default action.
*/
@Override
public boolean onQueryTextSubmit(String newText) {
return true;
}
/**
* Called when the query text is changed by the user.
*
* @param newText the new content of the query text field.
* @return false if the SearchView should perform the default action of showing any
* suggestions if available, true if the action was handled by the listener.
*/
@Override
public boolean onQueryTextChange(String newText) {
ThizLog.d(TAG, "Inside onQueryTextChange");
// called when the action bar search text has changed. Update
// the search filter, and restart the loader to do a new query
// with this filter.
String newFilter = !TextUtils.isEmpty(newText) ? newText : null;
// Don't do anything if the filter hasn't actually changed.
// Prevents restarting the loader when restoring state.
if (mCurFilter == null && newFilter == null) {
return true;
}
if (mCurFilter != null && mCurFilter.equals(newFilter)) {
return true;
}
mCurFilter = newFilter;
getLoaderManager().restartLoader(0, null, this);
return true;
}
});
在这种特殊情况下,我们需要将用户输入的文本传递给CursorLoader并让它重新加载光标并获得适当的结果。
答案 1 :(得分:2)
此问题已在ActionBarSherlock的version 4.3.0中修复。