2014-03-04 172 views
1

我使用操作欄菜單功能創建基本活動,並從中擴展了其他活動。擴展操作欄菜單項

public class BaseActivity extends SherlockFragmentActivity { 

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

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     ... 
     return true; 
    } 


} 

現在我想在某些活動中添加一些按鈕到操作欄。我如何添加元素到操作欄並使用基本活動中的元素?

回答

5

你可以這麼做,就像在BaseActivity一樣簡單,只是不要忘記打電話給super.onCreateOptionsMenu()

main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/action_help" 
     android:icon="@drawable/ic_action_help" 
     android:title="@string/action_help" /> 
</menu> 

home.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/action_new" 
     android:icon="@drawable/ic_action_new" 
     android:title="@string/action_new" /> 
</menu> 

在BaseActivity您使用的基地菜單配置main.xml

public class BaseActivity extends SherlockFragmentActivity { 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 

在孩子的活動您正在使用其他的配置從home.xml只與額外的菜單項,沒有重複。但是不要忘記調用super.onCreateOptionsMenu(menu)具有相同menu實例從BaseActivity添加元素(父菜單項後子菜單項將被添加如果你打電話super的方法後膨脹,並之前以其他方式)。

public class HomeActivity extends BaseActivity { 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.home, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
} 
0

您可以在main.xml中

例如指定的動作條措施:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:id="@+id/action_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/action_search"/> 
<item android:id="@+id/action_compose" 
     android:icon="@drawable/ic_action_compose" 
     android:title="@string/action_compose" /> 

而且從你的子類調用

@Override 
public boolean onOptionsItemSelected(MenuItem item) {  
    return super.onOptionsItemSelected(item); 
} 
0

讓不同的XML文件包含您需要特定於這些活動的按鈕。對於Activity1說你有兩個按鈕,對於Activity2你有一個,那麼你將創建2個xml文件,如下圖。

action_activity1.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_search" 
    android:icon="@drawable/ic_action_search" 
    android:title="@string/action_search"/> 
    <item android:id="@+id/action_compose" 
    android:icon="@drawable/ic_action_compose" 
    android:title="@string/action_compose" /> 
</menu> 

action_activity2.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/action_search" 
    android:icon="@drawable/ic_action_search" 
    android:title="@string/action_search"/> 
</menu> 

然後在onCreateOptionsMenu(菜單菜單)方法膨脹所需的XML文件。像,

活動1:

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.action_activity1, menu); 
    return true; 
} 

活性2:

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.action_activity2, menu); 
    return true; 
} 

請小心充滿語法(爲我所用程序兼容性動作條)。 :)

這是我使用的。希望你覺得它有幫助。而且,我會很高興看到比這更簡單的方法。 :)

+0

這很好,但我認爲這不是好方法,如果你有超過10個活動的菜單。 – waldemar

+0

在這種情況下,我將使BaseActivity實現此菜單,以便所有活動(除非指定了不同的活動)都將繼承相同的活動。 –