2012-12-07 20 views
2

我使用的ActionBar福爾摩斯和我有三個按鈕Android的動作條行動項目

  1. 搜尋與搜索查看它打開打開一個hiddent的對話片段
  2. 排序
  3. 分類下拉菜單

當我點擊搜索按鈕時,SearchView文本會展開。當搜索視圖展開時,我想隱藏操作欄中的所有其他圖標,當我退出擴展的searchView模式時,它應該返回。

public class MainActivity extends SherlockFragmentActivity implements 
     SearchView.OnQueryTextListener { 
    protected static CharSequence[] _categories = { "Amusement Park", 
      "Bird Sanctuary", "Wild Life", "River", "Hill Station", "Temple" }; 

    protected static boolean[] _selections = new boolean[_categories.length]; 
    public SearchView mSearchView; 
    private TextView mStatusView; 

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

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

     MenuItem searchItem = menu.findItem(R.id.action_search); 
     MenuItem categoryItem = menu.findItem(R.id.action_category); 
     MenuItem sortItem = menu.findItem(R.id.action_sort); 
     mSearchView = (SearchView) searchItem.getActionView(); 
     setupSearchView(searchItem, categoryItem, sortItem); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
     /* 
     * case R.id.action_go: Intent i = new Intent(MainActivity.this, 
     * PlaceActivity.class); startActivity(i); break; 
     */ 
     /* 
     * case R.id.action_search: Toast.makeText(this, "Searh", 
     * Toast.LENGTH_LONG).show(); break; 
     */ 
     case R.id.action_category: 
      showDialog(); 
      break; 
     case R.id.action_sort_alpha_az: 
      Toast.makeText(this, "Alpha AZ", Toast.LENGTH_LONG).show(); 
      break; 
     case R.id.action_sort_alpha_za: 
      Toast.makeText(this, "Alpha ZA", Toast.LENGTH_LONG).show(); 
      break; 
     case R.id.action_sort_dist_nf: 
      Toast.makeText(this, "Dist NF", Toast.LENGTH_LONG).show(); 
      break; 
     case R.id.action_sort_dist_fn: 
      Toast.makeText(this, "Dist FN", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      // return super.onOptionsItemSelected(item); 
      break; 
     } 
     return true; 
    } 

    private void setupSearchView(MenuItem searchItem, MenuItem categoryItem, 
      MenuItem sortItem) { 
     mSearchView.setIconifiedByDefault(true); 
     searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS 
       | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 
    } 

    public boolean onQueryTextChange(String newText) { 
     Log.i("Nomad", "onQueryTextChange"); 
     return false; 
    } 

    public boolean onQueryTextSubmit(String query) { 
     Log.i("Nomad", "onQueryTextSubmit"); 
     return false; 
    } 

    public boolean onClose() { 
     Log.i("Nomad", "onClose"); 
     return false; 
    } 

    protected boolean isAlwaysExpanded() { 
     return false; 
    } 


} 

回答

8

我做相同的,如下所示:

private Menu mainMenu = null; 

public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.activity_main, menu); 

    mainMenu = menu; 

    MenuItem searchItem = menu.findItem(R.id.action_search); 
    MenuItem categoryItem = menu.findItem(R.id.action_category); 
    MenuItem sortItem = menu.findItem(R.id.action_sort); 
    mSearchView = (SearchView) searchItem.getActionView(); 
    mSearchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //hide action item 
       if (mainMenu != null) 
        mainMenu.findItem(R.id.quick_actions).setVisible(false); 
     } 
    }); 
    mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {   
     @Override 
     public boolean onClose() { 
      //re-show the action button 
       if (mainMenu != null) 
        mainMenu.findItem(R.id.quick_actions).setVisible(true); 
      return false; 
     } 
    }); 
    //setupSearchView(searchItem, categoryItem, sortItem); 
    return true; 
} 
+0

我應該在哪裏設置代碼塊中的上述代碼? –

+1

在onCreateOptionsMenu – Nermeen

+0

mainMenu無法解析爲一個變量,我試圖用我的菜單菜單替換它。但它仍然會出現錯誤。 mainMenu指的是什麼? –

0

我的解決辦法是:

@Override 
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) 
{ 
    final MenuItem item = menu.add(0, MENU_SEARCH, 0, "Search"); 

    final SearchView searchView = new SearchView(getActivity()); 

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() 
    { 
     @Override 
     public void onFocusChange(View view, boolean queryTextFocused) 
     { 
      if(!queryTextFocused) 
      { 
       item.collapseActionView(); 
      } 

      int count = menu.size(); 

      for (int i = 0; i < count; i ++) 
      { 
       MenuItem it = menu.getItem(i); 
       it.setVisible(item.equals(it)) || !queryTextFocused); 
      } 
     } 
    }); 

    item.setActionView(searchView); 
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 
} 
+0

調用需要API級別14(當前最小值爲10) :android.view.MenuItem#collapseActionView –

0

只需菜單的XML,只是給該屬性爲應用程序:showAsAction =用於seachview和其他菜單項的「collapseActionView | ifRoom」將它作爲app:showAsAction =「ifRoom」。這會給你預期的結果。