我是 android fragment 开发的新手。
我在点击后退按钮时遇到了这个问题...即使我在 onAttach、onDetach、onCreate、onCreateView 和 onCreateOptionMenu 中使用 myActivity.invalidateOptionMenu() 和 getActionBarActivity.setTitle(),操作栏菜单及其标题都没有更新我清除了菜单,但一切都是徒劳的!
当我使用 drawerLayout 重新实例化 fragment 时,有时会再次出现同样的问题!
例如我有 ListingFragment、EditingFragment、DetailsFragment 和 ImportFragment
这是带有 EditingFragment 选项的 ListingFragment
PS:当我回到编辑 fragment 时,菜单不起作用,不再起作用了!
查看屏幕截图 here
我遇到的第二个问题是,有时 fragment 会添加到同一个容器中,请参见下面的屏幕截图! “导入”一词是 ImportFragment 包含的内容(加上操作栏标题),当 fragment DetailsFragment 打开时,其他 View (加上菜单)在屏幕中。一旦我从 fragment 中点击导入按钮,它就会显示以下屏幕!
查看屏幕截图 here
有谁知道如何重新排列事物以获得运行良好的应用程序?
相关代码如下:
private void setActionBarTitle(String title) {
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(
title);
}
public void restoreActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.clear();
return super.onCreateOptionsMenu(menu);
}
public void restoreMenu()
{
restoreActionBar();
this.invalidateOptionsMenu();
}
最佳答案
对于可能面临同样问题的任何人,我已经找到了方法(或方法)
菜单问题:我添加的 fragment 不是“替换它们”。每次 fragment 没有任何“选项菜单”时,它都会将最后一个菜单添加到操作栏。要么停止添加并开始替换 fragment ,要么扩充一个新的“空”菜单。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
setHasOptionsMenu(true);
menu.clear();
inflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, inflater);
}
主要是:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mypackage.MainActivity" > </menu>
后退按钮问题:将以下代码添加到您的 Activity 中:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish(); } else {
getSupportFragmentManager().popBackStack();
if(fragmentX.isResumed())
getSupportActionBar().setTitle("the title");
}
}
PS:您可以使用 isResumed 或 isVisible。
与操作栏标题相关的任何内容:保留对您添加的 fragment 的引用。您可以使用 fragment 本身更改操作栏标题,变通并使用 Activity 更改标题
if(fragmentX.isVisible()) getSupportActionBar.setTitle(getString(R.string.your_string_name));
关于Android Fragments 和后退按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687776/