片段选项菜单 如何避免在一个片段菜单中显示另一个片段的菜单

6
我正在依次替换两个碎片,这两个碎片都有不同的选项菜单。当我替换第二个碎片时,它也显示了第一个碎片的菜单。在两个碎片中都设置了setHasOptionsMenu(true);。
我只想显示特定的碎片中创建的选项菜单,并避免其他碎片的选项。请帮忙,谢谢。

1
你能发布一些代码来展示你是如何替换fragment的吗?你是否使用FragmentTransaction.replace()方法? 你的xml设置和如何初始化fragments是怎样的? - Evripidis Drakos
最好的方法是将所有菜单放在一个单独的文件中,并在活动中进行填充。从活动加载片段后,调用invalidateOptionsMenu(),然后在onPrepareOptionsMenu()中处理相应菜单项的可见性。 - Rajen Raiyarela
@Jogendra Gouda,你试过我的解决方案了吗? - Hiren Patel
据我所知,目前不可能实现,但您可以给它取一个不同的名称,但保持值/标题相同。 - MKJParekh
3个回答

0

这就是您的活动将会如何表现

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            //your menu item 
                return true;
        }

        return super.onOptionsItemSelected(item); // important line
    }

在你的片段 onCreateView() 方法中
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        setHasOptionsMenu(true); //imp line
        return inflater.inflate(R.layout.fragment_following, container, false);
    }



@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

0

在替换片段(或提交片段事务)后,您必须声明选项菜单已更改,可以通过调用invalidateOptionsMenu()来实现。下一次需要显示时,将调用onCreateOptionsMenu(Menu)方法。

注意:如果您正在使用AppCompat支持库,则需要调用supportInvalidOptionsMenu


0

只需在 onCreate() 中调用 invalidateOptionsMenu()

更多参考 请查看此链接

希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接