Android Fragments 和后退按钮问题

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

我是 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/

相关文章:

android - 将 RecyclerView(Recycler Fragment) 添加到对话框

java - 如何从通知中打开 fragment ?

android - 通过 Fragment 中的 Intent 启动 Fragment

java - 工具栏中的标题和溢出菜单

java - 如何在android中有一个IF OR?

java - 在 Activity 中设置 Google Map Fragment,但应用程序现在一直崩溃?

android - Android 中的 SQLiteDatabase.query() 语法

安卓。 fragment getActivity() 有时返回 null

android - 如何在 android 的 actionbar 中设置自定义 View ?

android - FragmentStatePagerAdapter/更新操作栏标题