如何更改已弃用的 onPrepareOptionsMenu

问题描述 投票:0回答:1

我尝试更改片段中使用的已弃用菜单方法的代码,例如 setHasOptionsMenu、onPrepareOptionsMenu...。 我发现可能有类似的任务link,但我不知道如何更改。

这是当前代码:

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

    setHasOptionsMenu(true); //<--deprecated
}

@Override
public void onPrepareOptionsMenu(Menu menu) {  //<--deprecated
    MenuItem item=menu.findItem(R.id.action_refresh);
    if(item != null)
        item.setVisible(false);
}

谢谢。

编辑

我不确定我是否理解Android SDK的变化。我是否必须从 Activity 中删除 onCreateOptionsMenu 并使用 onPrepareMenu 将 addMenuProvider 放入每个片段? 我只有一个 menu.xml,我想隐藏某个片段中的某些项目。

java android menu android-inflate
1个回答
0
投票

所以,我不确定是否可以,但是这个修改有效。 在活动中我留下了菜单方法:

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

在片段中我放置了这些:

requireActivity().addMenuProvider(new MenuProvider() {
        @Override
        public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
        }

        @Override
        public void onPrepareMenu(@NonNull Menu menu) {
            MenuItem item=menu.findItem(R.id.action_delete_tags);
            if(item != null)
                item.setVisible(false);
        }

        @Override
        public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
            //...

            return false;
        }
    }, getViewLifecycleOwner(), Lifecycle.State.RESUMED);

看起来有效。有必要从 onCreateMenu 中删除 inflate 并添加 onPrepareMenu。

© www.soinside.com 2019 - 2024. All rights reserved.