我有一個活動可以包含幾個片段。每個片段都可以在ActionBar中擁有自己的菜單項。這到目前爲止工作得很好,每個項目都是可點擊的,並執行所需的操作。OnOptionsItemSelected in activity在onOptionsItemSelected之前調用片段。其他方式可能嗎?
我的問題是以下。在MainActivity我聲明瞭以下行攔截的動作條的HomeIcon電話:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
clearBackStack();
setHomeFragment();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我宣佈它的活動,因爲我想,每一個片段應該調用,這樣我就不必趕android.R.id.home每個片段中的情況。
在一個片段中,我使用了setDisplayHomeAsUpEnabled(true),以便獲取ActionBar圖標左側的小箭頭。當在這個片段中點擊HomeIcon時,我不想設置HomeFragment,我想設置上次顯示的片段。所以我有一個onOptionsItemSelected - 片段中的方法:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
setLastFragment();
return true;
...
然而,這並不工作,我想它的工作方式。首先調用Activity的onOptionsItemSelected,獲取MenuItem並重定向到HomeFragment。與其他片段中聲明的其他MenuItems我可以檢查看到相同的行爲。 Activity首先被調用,不會捕獲MenuItem(默認情況),然後重定向到super.onOptionsItemSelected(item)。
所以這似乎是Android處理菜單點擊的情況。第一個活動,然後片段。有沒有辦法改變這個?我不想將android.R.id.home-case放在每個片段中並在那裏處理。有沒有更好的方法來做到這一點?
這不是MrHill所要求的!我面臨同樣的問題。通常情況下,活動處理「自上而下」按鈕。有時我們希望在某個片段當前處於活動狀態時按下「Home UP」按鈕時執行特殊操作。在Activity onOptionsItemSelected上返回false將阻止活動處理該事件。 – John