Android Fragments&后退按钮问题

时间:2014-07-10 23:10:46

标签: android android-fragments android-actionbar android-menu android-actionbar-compat


我是android片段开发的新手...... 按下后退按钮时出现此问题...操作栏菜单及其标题都没有更新,即使我使用myActivity.invalidateOptionMenu()和getActionBarActivity.setTitle():onAttach,onDetach,onCreate,onCreateView和onCreateOptionMenu我清理了菜单,但这一切都是徒劳的! 当我使用drawerLayout重新设置片段时,有时会出现同样的问题! 例如,我有ListingFragment,EditingFragment,DetailsFragment和ImportFragment 这是带有EditingFragment选项的ListingFragment PS:当我回到编辑片段时,菜单不起作用,不再有了!

检查截屏here

我遇到的第二个问题是有时候,碎片会被添加到同一个容器中,请看下面的屏幕截图! “导入”一词有ImportFragment包含的内容(加上操作栏标题),当片段DetailsFragment打开时,其他视图(加上菜单)在屏幕上。一旦我从片段中点击导入按钮,它就会显示以下屏幕!

检查截屏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();
}

1 个答案:

答案 0 :(得分:2)

对于那些可能面临同样问题的人,我找到了方法(或方法)

菜单问题:我正在添加片段而不是"替换它们"。每次片段没有任何"选项菜单"它将最后一个菜单添加到操作栏。要么你停止添加并开始更换片段,要么你要腾出一个新的"空的"菜单。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    setHasOptionsMenu(true);
    menu.clear();
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

其中main是:

<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>

后退按钮问题:将以下代码添加到您的活动中:

    @Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
        this.finish();      } else {
        getSupportFragmentManager().popBackStack();
        if(fragmentX.isResumed())
            getSupportActionBar().setTitle("the title");
    }
}

PS:您可以使用isResumed或isVisible。 与操作栏标题相关的任何内容:保留对您添加的片段的引用。您可以使用片段本身更改操作栏标题,解决方法并使用活动依据更改标题

if(fragmentX.isVisible()) getSupportActionBar.setTitle(getString(R.string.your_string_name));