2

我正在尝试在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集成?

4

2 回答 2

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 并让它重新加载具有适当结果的光标。

于 2013-02-03T15:32:45.967 回答
2

此问题已在ActionBarSherlock版本 4.3.0中得到修复。

于 2013-05-02T00:09:26.837 回答