Hide menu items when ActionLayout is opened
actionbarsherlock, actionview, android-actionbar, menuitem
Solution
This is what i ended up using.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) searchItem.getActionView();
setupSearchView(searchItem);
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// hide action item
if (menu != null) {
menu.findItem(R.id.notifications).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
}
}
});
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
adapter.getFilter().filter("");
// re-show the action button
if (menu != null) {
menu.findItem(R.id.notifications).setVisible(true);
menu.findItem(R.id.share).setVisible(true);
}
return false;
}
});
return true;
}
private void setupSearchView(MenuItem searchItem) {
//code
}
Problem
I am using ActionBarSherlock: There are 3 menu items, of which only 1 has an ActionLayout. default_menu.xml ``` <item android:id="@+id/searchIcon" android:icon="@drawable/search_icon" android:actionLayout="@layout/search_icon_actionview" android:showAsAction="always|collapseActionView" android:title="Search"/> <item android:id="@+id/newIcon" android:icon="@drawable/new_icon" android:orderInCategory="0" android:showAsAction="ifRoom|collapseActionView" android:title="New"/> <item android:id="@+id/notificationIcon" android:icon="@drawable/notification_icon" android:orderInCategory="0" android:showAsAction="ifRoom|collapseActionView" android:title="Notifications"/> ``` if i am using the above code. Only 1st 2 icons are visible. And if i make 2nd and 3rd as Always they remain even when the actionLayout is opened when clicked on Search. I want to show all the 3 Menu Items initially and when search_icon is clicked hide every Item. I also have a doubt about my implementation, whether i am doing i the right way. In the Activity's(which has a viewPager) first Fragment: ``` @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.searchIcon: mEtSearchbar.clearFocus(); (new Handler()).postDelayed(new Runnable() { public void run() { mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0)); mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0)); } }, 100); return true; case R.id.newIcon: return true; case R.id.notificationIcon: return true; default: return super.onOptionsItemSelected(item); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // TODO Auto-generated method stub inflater.inflate(R.menu.default_menu, menu); mSearchbar = (MenuItem) menu.findItem(R.id.searchIcon); View actionview = mSearchbar.getActionView(); mEtSearchbar = ((EditText) actionview.findViewById(R.id.search_editText)); ImageView searchImage = ((ImageView) actionview.findViewById(R.id.search_image)); searchImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { String s = mEtSearchbar.getText().toString(); Toast.makeText(getSherlockActivity(), "Searching for: " + s, Toast.LENGTH_SHORT) .show(); } }); super.onCreateOptionsMenu(menu, inflater); } ```