java - SearchView 主题更改

标签 java android android-activity searchview

我的搜索 View 有问题。

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

我总是想走第二种路... 知道为什么会发生这种情况吗?

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

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;
}

谢谢!

enter image description here enter image description here

编辑

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

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

在我的 onCreateOptionsMenu(Menu menu) 中 我必须编辑,因为我想在 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);
    }
}

关于java - SearchView 主题更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276822/

相关文章:

java - 建议需要代码共享 现场 异地

java - 如何改进 Guava Optional 的 mockito 默认行为?

android - 使用简单XML生成gradle错误

android - 如何将 ArrayList< com.google.api.services.drive.model.File> 传递给 Activity

java - 简单 XML 解析 RSS 提要,其中包含声明两次的 2

java - 使用注释在 Netbeans 平台上创建窗口组

Android:标题栏颜色不改变

android - 无法在 Android Studio 中实现 ksoap2-android-assembly-3.6.0

android - 通过多个 Activity 传递数据

android - Main Activity 销毁后不会被垃圾回收,因为它被 InputMethodManager 间接引用