gpt4 book ai didi

java - 菜单抽屉 Fragments 即使未显示也会膨胀其菜单

转载 作者:行者123 更新时间:2023-12-01 12:29:15 26 4
gpt4 key购买 nike

关于 fragment 管理,肯定有一些基本的东西我还没有完全理解。

这是我的应用程序的当前架构:

  • 我们有一个使用 Eclipse 中提供的模板生成的菜单 Activity (MenuActivity.java)
  • 菜单中显示的每个 fragment 都有两种布局。一个用于手机,另一个用于平板电脑。这些布局仅包含使用 FragmentManager/Transaction 替换为 fragment 的 FrameLayout
  • 每个 fragment 都实现 onCreateOptionsMenu 以添加自己的菜单部分。

问题是,当我使用抽屉菜单切换选项卡时,某些选项仍保留在操作栏中。此外,接收 onOptionsItemSelected 调用的 fragment 始终是最后选择的 fragment 。

MainActivity.java的一些代码

@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = null;
String tag = "";

switch(position) {
case 0:
tag = "tours_main_fragment";

fragment = new ToursMainFragment();
mTitle = getString(R.string.title_section1);

break;

case 1:
tag = "motos_main_fragment";

fragment = new MotoMainFragment();
mTitle = getString(R.string.title_section2);

break;

}

if(fragment != null) {
fragmentManager
.beginTransaction()
.replace(R.id.container, fragment, tag)
.commit();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.menu, menu);

restoreActionBar();
return false;
}
return super.onCreateOptionsMenu(menu);
}

最佳答案

我猜您正在使用 DrawerLayout 进行导航,并根据抽屉导航中选择的项目将主 Activity 布局中的 fragment 容器替换为适当的 fragment 。

您可能希望在打开/关闭抽屉时使选项菜单无效。如 Activity API 中所述:

public void invalidateOptionsMenu ()

Added in API level 11Declare that the options menu has changed, so should be recreated. The onCreateOptionsMenu(Menu) >method will be called the next time it needs to be displayed.

因此在抽屉切换时调用此方法应该有助于根据 fragment 重新创建菜单选项。示例代码:

  mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) {

public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mTitle);
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}

public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle(mDrawerTitle);
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}

关于java - 菜单抽屉 Fragments 即使未显示也会膨胀其菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079943/

26 4 0