android - fragment 中的 onCreateOptionsMenu() 不替换 ActionBar 菜单

标签 android android-fragments android-actionbar navigation-drawer android-menu

我在我的应用程序中使用 NavigationDrawer 并在单击抽屉中的项目时替换 fragment 。我遇到的问题是,当我更改 fragment 时,ActionBar 中的菜单项没有更新。

我已遵循本教程 https://www.grokkingandroid.com/adding-action-items-from-within-fragments/很接近,但它仍然无法在我的应用程序中运行。

在此处添加父 Activity 和其中一个 fragment 的一些代码 fragment 。 我需要的是在初始 fragment 被 ContactFormFragment.java 替换时显示联系表单 fragment (R.menu.contactform_send_menu) 的其他菜单项。

public class MainActivity extends FragmentActivity implements ActionBar.OnNavigationListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle(R.string.app_name);

        // Set up the action bar to show a dropdown list.
        ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);

        createNavigationDrawer(savedInstanceState);
    }

    private final int DRAWER_MAIN = 0;
    private final int DRAWER_CONTACT = 5;

    // update the main content by replacing fragments
    private void selectItem(int position) {
        Fragment fragment = null;
        Bundle args = new Bundle();
        boolean isFragment = false;

        switch (position) {
        case DRAWER_MAIN:
            fragment = new WelcomeSectionFragment();
            args.putString(WelcomeSectionFragment.ITEM_NAME, dataList.get(position).getItemName());
            args.putInt(WelcomeSectionFragment.IMAGE_RESOURCE_ID, dataList.get(position).getImgResID());
            getActionBar().setTitle(R.string.app_name);
            isFragment = true;
            break;
        case DRAWER_CONTACT:
            fragment = new ContactFormFragment();
            args.putString(ContactFormFragment.ITEM_NAME, dataList.get(position).getItemName());
            args.putInt(ContactFormFragment.IMAGE_RESOURCE_ID, dataList.get(position).getImgResID());
            getActionBar().setTitle(R.string.contactform_title);
            isFragment = true;
            break;
        default:
            break;
        }

        if (isFragment) {
            fragment.setArguments(args);
            FragmentManager frgManager = getFragmentManager();
            frgManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

            mDrawerList.setItemChecked(position, true);
            setTitle(dataList.get(position).getItemName());
            mDrawerLayout.closeDrawer(mDrawerList);
        }
    }

}

和 fragment :

public class ContactFormFragment extends Fragment {

    public ContactFormFragment() {

    }

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

        ca = getActivity();
        Reachability.registerReachability(ca.getApplicationContext());

        settings = ca.getSharedPreferences(Konstanten.PREFERENCES_FILE, 0);
        member = new Gson().fromJson(settings.getString(Konstanten.MEMBER_OBJECT, null), Member.class);

        latoFontLight = Tools.getFont(ca.getAssets(), "Lato-Light.ttf");
        latoFontBold = Tools.getFont(ca.getAssets(), "Lato-Bold.ttf");

        // Update action bar menu items?
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Do something that differs the Activity's menu here
        super.onCreateOptionsMenu(menu, inflater);

        menu.clear();

        if (Build.VERSION.SDK_INT >= 11) {
            // selectMenu(menu);
            inflater.inflate(R.menu.contactform_send_menu, menu);
        }
    }
}

调试时我可以看到 setHasOptionsMenu(true);在 onCreate() 中被调用,我也进入 ContactFormFragment.java 的 onCreateOptionsMenu()。我只是不明白为什么操作栏保留其初始菜单项而不替换它们。我错过了什么?

感谢您的帮助。

最佳答案

尝试将 setHasOptionsMenu(true); 放在 ChildFragment.javaonCreateView() 中 我在您发布的代码中没有看到一个。

关于android - fragment 中的 onCreateOptionsMenu() 不替换 ActionBar 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23314472/

相关文章:

android - ld 返回 1 退出状态 - c

android - 在 CoordinatorLayout 中使用时,页脚会滚出屏幕

android - 如何在知道菜单项的十进制值的情况下找出菜单项的字符串 ID?

android - 为 Android 应用程序创建 3D 动画

javascript - 将 JavaScript 添加到 Web View

android - ScrollView 填充 View 端口线性布局

android - 在 Activity 扩展 fragment 中以编程方式添加 linearLayout 元素

android - 如何从 Activity 中转到 fragment

android - 动态更改操作栏分隔线颜色(android :bottom for programmatically generated ShapeDrawable)?

android - AppCompat v7 :21 Split Action Bar Broken?