我在片段中有一个搜索按钮,但操作栏中还有另一个图标。如果我按搜索,则仍会显示另一个图标:/
我在这里发布了一些其他的解决方案,但它们似乎都没有用于片段。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);
根本不起作用
<item
android:id="@+id/action_search"
android:icon="@mipmap/ic_search"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
我认为这是正确的方法,因为它然后显示一个后退箭头,我可以通过按回来取消搜索。但我的其他图标仍在那里,它们只是放在右侧。如果我输入内容并按下另一个按钮,应用程序就会崩溃。
这根本不会被调用:
MenuItemCompat.getActionView(searchItem).addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewDetachedFromWindow(View arg0) {
// search was detached/closed
}
@Override
public void onViewAttachedToWindow(View arg0) {
// search was opened
}
});
这里只调用onClose监听器:
searchView.setOnQueryTextListener(this);
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Hide other option item
if (menu != null) {
menu.findItem(R.id.action_sort).setVisible(false);
}
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
// Show other option item
if (menu != null) {
menu.findItem(R.id.action_sort).setVisible(true);
return true;
}
return true;
}
});
答案 0 :(得分:1)
您可以使用show/hide
和option
侦听程序以编程方式searchClick
其他close
项。
要执行此操作,请按以下步骤更新您的onCreateOptionsMenu
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Hide other option item
if (menu != null) {
menu.findItem(R.id.action_other).setVisible(false);
}
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
// Show other option item
if (menu != null) {
menu.findItem(R.id.action_other).setVisible(true);
}
return false;
}
});
return true;
}
当然,您应该使用app:showAsAction="always|collapseActionView"
action_search
项menu_search.xml
<强> menu_search.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_search"
android:icon="@mipmap/ic_search"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
<item
android:id="@+id/action_other"
android:icon="@drawable/ic_other"
android:title="Other"
app:showAsAction="always"/>
</menu>
<强>更新强>
尝试使用MenuItemCompat.setOnActionExpandListener()
:
MenuItemCompat.setOnActionExpandListener(menuItem, new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
希望这会有所帮助〜