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;
}
}
}
他們做同樣的事情(supportInvalidateOptionsMenu只是調用invalidateOptionsMenu) – Jamie