2012-06-21 14 views
0

我希望能夠根據我的應用程序的上下文將ActionBarItem從ActionBar移動到選項菜單。Android:在ICS中,如何將ActionBarItem從ActionBar移動到選項菜單?

下面的活動有2個菜單項。 1在ActionBar中設置爲ALWAYS_SHOW,另一個設置爲從不在ActionBar中顯示。活動的佈局包含一個按鈕。單擊此按鈕時,ActionBar按鈕應移動到選項菜單(如果它顯示在ActionBar中)或應移動到ActionBar(如果它在選項菜單中)。

此活動按預期在Honeycomb上運行。但是,調用MenuItem.setShowAsAction方法在ICS中不起作用。 MenuItem.setVisible確實隱藏/顯示ICS中的ActionBar項目,但它不會導致項目被移動到選項菜單。任何想法如何做ICS的這項工作?

public class TempProjActivity extends Activity implements OnClickListener 
{ 
    Button hideButton; 
    MenuItem actionbarButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     hideButton = (Button) findViewById(R.id.showhidebutton); 
     hideButton.setOnClickListener(this); 

    } 

    boolean visible = true; 
    @Override 
    public void onClick(View v) 
    { 
     if(visible) 
     { 
      actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); 
      visible = false; 
     } 
     else 
     { 
      actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
      visible = true; 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.optionsmenu, menu); 

     actionbarButton = menu.findItem(R.id.actionbarbutton); 

     return super.onCreateOptionsMenu(menu); 
    } 
} 


<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/actionbarbutton" 
      android:icon="@drawable/ic_launcher" 
      android:text="@string/button" 
      android:showAsAction="always"/> 
     <item 
      android:text="@string/extra" 
      android:showAsAction="never"/> 
</menu> 


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFFFF" 
    android:orientation="horizontal" > 
    <Button android:id="@+id/showhidebutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</FrameLayout> 

回答

0

好吧,我明白了這一點。有兩個問題:在ICS上,當我調用setShowAsAction時,onCreateOptionsMenu沒有被觸發,並且我在我的actionbarButton上設置的showAsAction值在下次調用onCreateOptionsMenu時沒有保留。在調用setShowAsAction之後,通過添加invalidateOptionsMenu來解決問題,第二個問題通過在菜單被充滿後重新設置showAsAction值來解決。

public class TempProjActivity extends Activity implements OnClickListener 
{ 
    Button hideButton; 
    MenuItem actionbarButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     hideButton = (Button) findViewById(R.id.showhidebutton); 
     hideButton.setOnClickListener(this); 

    } 

    boolean visible = true; 
    @Override 
    public void onClick(View v) 
    { 
     if(visible) 
     { 
      visible = false; 
      invalidateOptionsMenu(); 
     } 
     else 
     { 
      visible = true; 
      invalidateOptionsMenu(); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.optionsmenu, menu); 

     actionbarButton = menu.findItem(R.id.actionbarbutton); 

     if(visible) 
     { 
      actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     } 
     else 
     { 
      actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); 
     } 

     return super.onCreateOptionsMenu(menu); 
    } 
} 
相關問題