如何隐藏\显示工具栏中的SearchView?

问题描述 投票:0回答:3

我有ToolBar,我已将Searchview定义为项目:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="never"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>
</menu>

然后我有BaseActivity类我定义Toolbar

protected final void onCreate(Bundle savedInstanceState, int layoutId)
{
    super.onCreate(savedInstanceState);
    setContentView(layoutId);

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    assert myToolbar != null;

}

@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, menu);

    return true;
}

我有搜索活动,我显示工具栏,我想显示searchview。问题是APP崩溃时出现空指针异常,无法找到SearchView action_search

public class SearchActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        SearchView searchview = (SearchView) findViewById(R.id.action_search);
        searchview.setVisibility(SearchView.VISIBLE);

    }
}

什么是显示\ hide SearchView的正确方法?

android toolbar searchview
3个回答
0
投票

在SearchActivity中,使用以下代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        MenuItem menuItem = menu.findItem(R.id.action_search);
        menuItem.setVisible(false);
        return true;
    }

0
投票

请注意,onCreate是第一个被调用的活动生命周期方法。 onCreateOptionsMenu在(取决于您的Android版本)或onCreate之后触发。考虑到这一点,当你在findViewById(R.id.action_search)方法中使用onCreate时,它将产生一个NULL对象,从而产生错误。

请检查here以获取其他开发人员的其他观察结果。

显示\隐藏SearchView的正确方法是什么?

您不必手动显示/隐藏它。在菜单资源中,您已经包含了android:showAsAction="never"选项。它means

切勿将此项目放在应用栏中。而是在应用栏的溢出菜单中列出该项目。

默认情况下,您的搜索视图项已被隐藏。要显示它,您需要单击工具栏上的溢出菜单(三个点)。


0
投票

试试以下:

第一步:将“app:showAsAction”属性更改为“always”

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>
</menu>

第二:您无法直接在onCreate中访问SearchView。所以删除下面的代码。

        SearchView searchview = (SearchView) findViewById(R.id.action_search);
        searchview.setVisibility(SearchView.VISIBLE);

第三:您可以在添加到工具栏时访问SearchView,即调用onCreateOptionsMenu时。

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu, menu);

            MenuItem mSearch = menu.findItem(R.id.action_search);
            mSearchView = (SearchView) mSearch.getActionView();//Store the reference in global variable of Base activity.
            //Do you customization here, like
            mSearchView.setOnQueryTextListener(this);
            return true;
    }

第四:现在你有了SearchView的参考。所以你可以显示/隐藏搜索视图,如下所示:

       if(mSearchView.isShown()) {
            mSearchView.setVisibility(View.GONE);
        } else {
            mSearchView.setVisibility(View.VISIBLE);
        }
© www.soinside.com 2019 - 2024. All rights reserved.