2017-02-17 49 views
0

enter image description here當我單擊搜索圖標,然後搜索視圖從onCreateOptionMenu()膨脹但刷新圖標不隱藏時,我的工具欄包含搜索圖標和刷新圖標。如果我在onMenuItemActionExpand()中隱藏刷新圖標,然後回來搜索查看回圖標兩個菜單項搜索和刷新獲取隱藏和默認設置圖標變得可見。下面是我已經實現的代碼。請幫助我!如何隱藏Android中的搜索圖標時,從工具欄中隱藏菜單項

MenuItem.java

@Override 
     public boolean onCreateOptionsMenu(final Menu menu) { 

      // Inflate the menu; this adds items to the action bar if it is present. 
       getMenuInflater().inflate(R.menu.main, menu); 
       item_search = menu.findItem(R.id.action_search); 
       item_refresh = menu.findItem(R.id.action_refresh); 

      final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item_search); 
      searchView.setOnSearchClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // hide action item 
        if (menu != null) { 
         menu.findItem(R.id.action_refresh).setVisible(false); 
        } 

       } 
      }); 
      searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
       @Override 
       public boolean onClose() { 
        // re-show the action button 
        if (menu != null) { 
         menu.findItem(R.id.action_refresh).setVisible(true); 
        } 
        return false; 

       } 
      }); 
+0

[SearchView.OnCloseListener沒有被調用]的可能重複(https://stackoverflow.com/questions/13920960/searchview-oncloselistener-does-not-get-invoked) –

回答

0
​MenuItem action_search; 
MenuItem action_refresh; 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    action_search = menu.findItem(R.id. action_search); 
    action_refresh = menu.findItem(R.id. action_refresh); 
    return super.onPrepareOptionsMenu(menu); 
} 
@Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      item_search = menu.findItem(R.id.action_search); 
      item_refresh = menu.findItem(R.id.action_refresh); 

     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item_search); 
     searchView.setOnSearchClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // hide action item 
       if (action_refresh != null) { 
        action_refresh.setVisible(false); 
        invalidateOptionsMenu(); 
       } 

      } 
     }); 
     searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
      @Override 
      public boolean onClose() { 
       // re-show the action button 
       if (action_search != null) { 
        action_search.setVisible(true); 
       } 
       if (action_refresh != null) { 
        action_refresh.setVisible(true); 
       } 
       invalidateOptionsMenu(); 
       return false; 

      } 
     }); 

​ 
+0

Thanx的答覆!我應該在哪裏調用這個,意思是setVisibility爲false或true後 –

+0

設置可見性後 –

+0

我試過在setOnSearchClickListener()它不允許單擊搜索圖標和setOnCloseListener()沒有改變。請詳細說明你的答案 –

0
Well you could imitate that yourself by hiding all the other items when the SearchView is expanded: 

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    final MenuItem searchItem = menu.findItem(R.id.search); 
    SearchView searchView = (android.widget.SearchView) searchItem.getActionView(); 

    // Detect SearchView icon clicks 
    searchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setItemsVisibility(menu, searchItem, false); 
     } 
    }); 
    // Detect SearchView close 
    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      setItemsVisibility(menu, searchItem, true); 
      return false; 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 

private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) { 
    for (int i=0; i<menu.size(); ++i) { 
     MenuItem item = menu.getItem(i); 
     if (item != exception) item.setVisible(visible); 
    } 
} 
+0

沒有工作。還有其他? –

0

看來,這是從Android的一個bug,你可以使用該解決方案here