FragmentTransaction 替换不起作用

2024-04-01

我已经在stackoverflow上搜索过这个问题并找到了这两个解决方案:

将一个片段替换为活动组内的另一个片段 https://stackoverflow.com/questions/5658675/replacing-a-fragment-with-another-fragment-inside-activity-group
片段添加或替换不起作用 https://stackoverflow.com/questions/11619573/fragment-add-or-replace-not-working

但我的代码似乎是正确的,您可以在下面检查,我的代码的注释是葡萄牙语(巴西):

这是我的类 MenuItemReceiver (是的,我使用 BroadcastReceiver 来显示我的片段),这已经可以显示我的片段内容,但是当我尝试替换它时,旧片段会保留下来,新片段只会出现在旧片段之上。

    public void onReceive(Context context, Intent intent) {
        //Fragment que será carregado, este fragment foi repassado pelo SlideMenuAdapter ao ter um item clicado
        Serializable serializableExtra = intent.getSerializableExtra(CustomFragment.CUSTOM_FRAGMENT);
        //Cast para CustomFragment uma vez que devemos recupera-lo como Serializable, poderia ter dado cast direto, mas decidi manter assim para melhor entendimento do código
        CustomFragment fragment =  (CustomFragment) serializableExtra;
        FragmentTransaction ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();//Informa que estamos inicando uma transação nova
        ft.replace(R.id.dashboard,fragment);
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();
        //Aplicamos as alterações permitindo que o estado do fragment seja perdido posteriormente, utilizamos o StateLoss para otimizar 
        //o gerenciamento de memória e garantir que nenhum fragment fique para traz porem sem possibilitado de ser "revisitado"
        slideMenuActivity.toggle();//Aqui simplesmente estamos escondendo o menu
    }

我也尝试过使用这段代码,但没有什么区别:

    public void onReceive(Context context, Intent intent) {
        Serializable serializableExtra = intent.getSerializableExtra(CustomFragment.CUSTOM_FRAGMENT);
        CustomFragment fragment =  (CustomFragment) serializableExtra;
        Fragment oldFragment = slideMenuActivity.getSupportFragmentManager().findFragmentById(R.id.dashboard);
        FragmentTransaction ft;
        if(oldFragment!=null){
            ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();
            ft.remove(oldFragment);
            ft.commit();
        }
        ft = slideMenuActivity.getSupportFragmentManager().beginTransaction();ft.add(R.id.dashboard,fragment);
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();
        slideMenuActivity.toggle();
    }

在这里您可以看到我的仪表板布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dashboard"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >

</FrameLayout>

请考虑到fragmentTransaction.replace(在撰写本文时)有问题 - 请参阅https://code.google.com/p/android/issues/detail?id=24674 https://code.google.com/p/android/issues/detail?id=24674.

你现在可以做的是

  • 为该问题加注星标(在提供的链接中)并
  • 提出一个解决方法,直到谷歌修复它。

我的解决方法是手动删除所有relevant片段(在fragmentManager.getFragments())并通常添加新片段fragmentTransaction.add.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FragmentTransaction 替换不起作用 的相关文章

  • RecyclerView每隔几个项目都是相同的 - 可扩展项目

    我的 recyclerView 有问题 我正在使用此布局来扩展 recyclerView 中的 cardView https github com AAkira ExpandableLayout https github com AAkir
  • 检测正在插入的设备

    我希望能够检测设备是否已插入 我希望能够像查询连接状态一样进行查询 这可能吗 或者我是否需要创建一个监听电池事件的广播接收器 显然是ACTION BATTERY CHANGED http developer android com refe
  • Android - 手机锁定时执行操作

    我想知道如何在手机锁定时执行某些操作 或继续侦听传感器或电池更换事件 当手机锁定时 它会停止监听传感器的变化 我尝试过使用唤醒锁 但它不起作用 也许我使用错误 任何帮助 将不胜感激 我建议为此使用服务 即使手机被锁定 它们也会在后台运行 这
  • 如何增加 Gradle 守护进程的最大堆大小?

    签署 apk 时 我收到以下消息 To run dex in process the Gradle daemon needs a larger heap It currently has 1024 MB For faster builds
  • 强制关闭导致HTTP实体可能不为空

    这里是发送数据 Http 的完整代码 asynctask private class MyAsyncTaskPupuk extends AsyncTask
  • Android异步服务调用策略

    这是场景 客户端对服务进行远程调用 返回 void 并提供 回调对象 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 因为这些操作视觉元素 执行 Activity runOnUiThread 块 该场景运行良
  • Android - 启用和禁用蓝牙 - SDK 3 (OS 1.5) - 以编程方式?

    我编写了代码来以编程方式启用和禁用各种功能 例如 Wifi 振铃模式 飞行模式 您将在电源切换小部件中看到的所有内容 我还没有找到如何做的一个是蓝牙 看来在 SDK level 3 OS 1 5 中没有漂亮的蓝牙管理器类 有没有人指出关于启
  • 收到“提供的 API 密钥已过期”。使用 Places API 时出错

    我已经从 Google 控制台为 Places API 密钥生成了服务器密钥 但每当我访问该服务时 我都会收到 提供的 API 密钥已过期 错误 我已尝试重新生成密钥 但仍然出现相同的错误 我遇到了同样的问题 但终于解决了 Google 地
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • 如何从Android webview下载文件?

    我下面的代码可以很好地加载 url 页面 并且在搜索歌曲后 当我单击下载链接时 它崩溃了 关于如何让下载管理器与网络视图一起工作的教程并不多 我究竟做错了什么 import java io File import android app A
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • 应用程序运行时相对布局中的元素显示不同

    我有一个ListView在片段内创建 并且它有一个搜索过滤器 问题是 XML 布局在 android studio 中显示正常 但在模拟器或手机中运行时 它显示不同 与我对齐时不正确 并且当我单击SearchView它位于选项卡导航下方 谁
  • Android Studio错误的含义:未注释的参数覆盖@NonNull参数

    我正在尝试 Android Studio 创建新项目并添加默认值后onSaveInstanceState方法创建 MyActivity 类 当我尝试将代码提交到 Git 时 我收到一个我不明白的奇怪错误 代码是这样的 我得到的错误是这样的
  • 调用属于Fragment的Activity的函数

    我正在与多个Fragments在 Android 下 我对如何从嵌入式应用程序发送和接收数据感到困惑 为了简单的解释 我有一个ListFragment and a MapFragment使用解释的方法here https stackover
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • 安卓独立包

    我有一个很大的 UI 大约 20 25 个屏幕 我应该如何组织我的代码 我应该按功能分成不同的包吗 我是否应该为所有 UI 类创建一个包 然后创建子包进行组织 或者我不应该创建单独的包并组织到文件夹中 任何帮助将不胜感激 当您创建文件夹时
  • 找不到与给定名称“@style/Theme.AppCompat.Light”匹配的资源

    我已经研究这个问题几个小时了 从 github 下载存储库后 任何 xml 文件中的唯一错误是 No resource found that matches the given name style Theme AppCompat Ligh

随机推荐