使用ActionbarSherlock在Actionbar中使用“SearchView”

时间:2012-12-06 14:57:19

标签: android search actionbarsherlock

我想在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集成?

2 个答案:

答案 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中修复。