SearchView没有图标化

时间:2014-12-17 13:20:17

标签: android android-fragments android-actionbar searchview

在我的应用中,我使用android.support.v7.widget.SearchView(来自支持v7库)从操作栏提供搜索。 我在MainActivity中设置了这个视图,代码如下:

MainActivity.java

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        this.menu = menu;

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        SupportMenuItem searchMenuItem = (SupportMenuItem) menu.findItem(R.id.menu_search);

        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
        searchView.setQueryRefinementEnabled(true);

        searchView.setIconifiedByDefault(true);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            // OnQueryTextListener body
            ...
        });

        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        return super.onCreateOptionsMenu(menu);
    }

然后在Fragment中我需要确保SearchView已折叠:

MyFragment.java

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.clearFocus(); // Try to prevent SearchView to steal focus. No luck!
    searchView.setIconified(true);
}

@Override
public void onResume() {
    super.onResume();

    setHasOptionsMenu(true);
    // other stuff
}

问题在于,不仅SearchView不会崩溃(我也尝试使用MenuItemCompat.collapseActionView(searchMenuItem)但没有成功:它总是返回false),而且SearchView在每个片段事务处“抢断”焦点(例如,将一个片段替换为另一个片段),因此当显示“新”片段时,SearchView具有焦点,因此它会显示其建议。

我还注意到如果我不打电话给setHasOptionsMenu那么就不会出现“偷东西”的问题。 有什么我做错了吗?

0 个答案:

没有答案