在onCreateView中调用supportInvalidateOptionsMenu是否有效? (对于actionbarsherlock)

时间:2013-07-01 18:56:58

标签: android actionbarsherlock

是否允许从SherlockFragment.onCreateView调用SherlockFragmentActivity.supportInvalidateOptionsMenu?我找不到任何其他说法,但似乎这样做可能会导致菜单项的点击不会被处理,直到退出活动。 (这发生在API 8仿真器上)。

我对这种行为有一个相当简单的重复。出于某种原因,它只发生在活动没有添加任何菜单项时,但片段确实发生了。

以下是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 个答案:

答案 0 :(得分:-1)

您只需拨打invalidateOptionsMenu()而不是supportInvalidateOptionsMenu()