gpt4 book ai didi

android - 隐藏 PreferenceFragment 上的选项菜单

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:02 26 4
gpt4 key购买 nike

我有一个包含多个 fragment 的应用程序。

只有一个 fragment 有一个选项菜单。一个 fragment 可以从 fragment B(它扩展了 listfragment)开始。

所以 B fragment 没有选项菜单,如果我从中选择某个项目, fragment A 将启动一个选项菜单,如果返回, fragment B 仍然没有选项菜单。

问题是,如果我从抽屉导航中选择设置菜单(它扩展了 preferencefragment),而我的当前窗口是 fragment A,则设置 fragment 将与 fragment A 中的选项菜单一起显示。但是如果我从抽屉导航中选择设置菜单,而我当前的窗口是 fragment B、C、D(没有选项菜单)一切正常。

fragment A:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);

inflater.inflate(R.menu.menu_station, menu);
}

设置 fragment :

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

setHasOptionsMenu(true);

sharedPreferenceSettings = new SharedPreferenceSettings(getActivity());

addPreferencesFromResource(R.xml.settings);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_settings, container, false);
}

问题出在哪里?

编辑:

经过几个小时的调试,我找到了解决方案。问题是 fragment 事务的不同 fragment 管理器。仅对于设置 fragment ,我使用了 getSupportFragmentManager(),对于其他 fragment ,我使用了 fragmentManager()。这会导致一些 fragment 从移动到返回堆栈。

最佳答案

我看到两个代码可疑。 fragment A 的代码建议:

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

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

注意事项:

  • super.onCreateOptionsMenu() 通常 在 inflate 之后调用。这没有很好的记录,所以我不确定有什么区别。许多人认为最佳答案的相关 SO 帖子是@ Android Options Menu in Fragment .
  • setHasOptionsMenu(true) 在同一 fragment 而不是设置 fragment 中完成。 fragment 保存自己的数据和状态。您不能如此轻易地修改 fragment 之间的状态。

关于android - 隐藏 PreferenceFragment 上的选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com