SearchView 主题更改

SearchView theme changing

我的搜索视图有问题。

我有 2 个主题,当我第一次接触 searchview 时,我看到了丑陋的第一张图片。但是当我再次进入searchview时,我从2张图片中得到了很好的主题。

我总是想走第二条路... 知道为什么会这样吗?

这是我初始化搜索视图的代码:

private void setupSearchView(MenuItem searchItem) {
    searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM
            | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    mSearchView = (SearchView) searchItem.getActionView();
    setupSearchView(searchItem);
    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            startSearch(null,true,null,false);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}

谢谢!

编辑

在@huangming 的帮助下,我编辑了我的代码。现在它就像一个魅力:)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

然后在我的 onCreateOptionsMenu(菜单菜单) 我必须进行编辑,因为我想在 Bundle 中发送自定义值供我的 SearchActivity 进行管理。

final SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        //mSearchView = (SearchView) searchItem.getActionView();
        mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        setupSearchView(searchItem);
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                Bundle b = new Bundle();
                final SharedPreferences prefs = getSharedPreferences("pref", Context.MODE_PRIVATE);
                int somevalue = prefs.getInt("value", 0);
                b.putInt("value", somevalue);
                searchManager.startSearch("", true, searchManager.getGlobalSearchActivity(), b, false);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });

你有下面的代码吗? 尝试删除代码 onSearchRequested();

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}