Android 如何从工具栏隐藏\显示SearchView?
我有Android 如何从工具栏隐藏\显示SearchView?,android,toolbar,searchview,Android,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:actionV
工具栏
,我将搜索视图
定义为一个项目:
<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>
我有搜索活动,我显示工具栏,我想显示searchview。问题是,应用程序因无法找到SearchView
action\u 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
搜索视图的正确方式是什么?在您的搜索活动中,使用以下代码:
@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;
}
请注意,onCreate
是要调用的第一个活动生命周期方法oncreateoptions菜单
在创建期间(取决于您的Android版本)或创建之后触发。记住这一点,当您在onCreate
方法中findViewById(R.id.action\u search)
时,它将生成一个NULL
对象,从而导致错误
请检查其他开发人员的其他观察结果
显示\隐藏SearchView的正确方式是什么
您不必手动显示/隐藏它。在您的菜单资源中,已经包含了选项android:showAsAction=“never”
。它:
切勿将此项目放置在应用程序栏中。相反,在应用程序栏的溢出菜单中列出该项
默认情况下,搜索视图项目已隐藏。要显示它,您需要单击工具栏上的溢出菜单(三个点)。请尝试以下操作:
第一:将“app:showAsAction”属性更改为“始终”
第三:当SearchView添加到工具栏时,即调用OnCreateOptions菜单时,您可以访问它
@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);
}
(科特林)
以下是显示/隐藏searchview的简单方法:
private lateinit var menuItem: MenuItem
private var mSearchView: SearchView? = null
private fun updateSearchUI(visible: Boolean) {
if (isChecked) {
menuItem.isVisible = true
}else{
menuItem.isVisible = false
}
}
如果要检查某些首选项并显示/隐藏,则在首次加载活动时:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu, menu)
menuItem = menu!!.findItem(R.id.shortcut_search)
mSearchView = menuItem.actionView as SearchView
updateSearchUI(PreferenceManager.getVisibilityStatus(applicationContext))
return true
}
switch_on_off.setOnCheckedChangeListener { buttonView, isChecked ->
updateSearchUI(isChecked)
}
}
如果要切换searchView显示/隐藏:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu, menu)
menuItem = menu!!.findItem(R.id.shortcut_search)
mSearchView = menuItem.actionView as SearchView
updateSearchUI(PreferenceManager.getVisibilityStatus(applicationContext))
return true
}
switch_on_off.setOnCheckedChangeListener { buttonView, isChecked ->
updateSearchUI(isChecked)
}
}
谢谢你的回答。问题是,我想在某些活动的工具栏上显示SearchView,而在其他活动上隐藏SearchView。这就是为什么我想在默认情况下像android:showAsAction=“never”一样隐藏它,并在某些活动中激活它。首先,你需要移动你的searchview.setVisibility(searchview.VISIBLE)使用onCreate
方法编写>(您可能不需要它)。
switch_on_off.setOnCheckedChangeListener { buttonView, isChecked ->
updateSearchUI(isChecked)
}
}