2013-07-01 59 views
3

允許從SherlockFragment.onCreateView調用SherlockFragmentActivity.supportInvalidateOptionsMenu嗎?我找不到任何其他的說法,但似乎這樣做可能會導致點擊菜單項不會被處理,直到退出該活動。 (這發生在API 8仿真器上)。在onCreateView中調用supportInvalidateOptionsMenu是否工作? (for actionbarsherlock)

我有一個相當簡單的這種行爲的repro。出於某種原因,只有在活動沒有添加任何菜單項時纔會發生,但是片段的確如此。

以下是repro的代碼,如果有人感興趣。會發生什麼,背景不會變成紅色。但是,如果您註釋掉getSherlockActivity()。supportInvalidateOptionsMenu(),它會變成紅色。

public class MainActivity extends SherlockFragmentActivity { 

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

    setContentView(R.layout.frag_container); 

    FunFragment frag = new FunFragment(); 

    FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
    trans.add(R.id.frag_container, frag, "foobar"); 
    trans.commit(); 
} 

}

public class FunFragment extends SherlockFragment { 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 

    super.onActivityCreated(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    getSherlockActivity().supportInvalidateOptionsMenu(); 
    return new View(getActivity()); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.add(0, 5, 0, "Do magic").setIcon(R.drawable.ic_launcher) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case 5: 
     getView().setBackgroundDrawable(new ColorDrawable(0xFFFF0000)); 
     return true; 
    default: 
     return false; 
    } 
} 

}

回答

-1

您只需撥打invalidateOptionsMenu(),而不是supportInvalidateOptionsMenu()

+1

他們做同樣的事情(supportInvalidateOptionsMenu只是調用invalidateOptionsMenu) – Jamie

相關問題