我尝试更改片段中使用的已弃用菜单方法的代码,例如 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,我想隐藏某个片段中的某些项目。
所以,我不确定是否可以,但是这个修改有效。 在活动中我留下了菜单方法:
@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。