java - Android Fragment 实际上没有被替换

标签 java android android-fragments

我正在尝试替换容器中的 fragment 。 对于视觉效果,我可以看到变化并且新 fragment 得到初始化。 但是,如果我检查容器中的哪个对象,它仍然会给我之前替换的旧 fragment ,这会导致问题,我无法调用新 fragment 的方法,因为它没有被替换为 100 %。
这里是我的代码:

fragmentTransaction = getFragmentManager().beginTransaction();
    Volumefragment volumefragment = new Volumefragment();
    System.out.println("Change Fragment");
    fragmentTransaction.replace(R.id.framecontainer,volumefragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    if(getFragmentManager().findFragmentById(R.id.framecontainer) instanceof Dummyfragmenet){
        System.out.println("Wrong object");
    }
}

最佳答案

当您使用 fragment 事务进行提交时,您真正在做的是安排该 fragment 的替换。它不会立即发生,它会在 UI 线程准备好执行时被替换。因此,当 fragment 事务未完全完成时,将调用您的打印(因为它是异步发生的)。如果要确保 fragment 已被替换,请在提交之后和打印之前添加以下内容:

getFragmentManager().executePendingTransactions()

澄清一下,摘自文档“在使用 FragmentTransaction.commit() 提交 FragmentTransaction 之后,它被安排在进程的主线程上异步执行。” 访问https://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

关于java - Android Fragment 实际上没有被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718799/

相关文章:

java - 无法将字符串资源用于 ListView 项

java - 如何在各个 JUnit 测试用例之间实现公共(public)数据共享

java - 无法构建 Shopizer 项目

java - 尝试将 vlcj 媒体播放器嵌入 JPanel 内的 WindowsCanvas

java - Gwt 中的多个 Html 页面

android - androidx.lifecycle.DefaultLifecycleObserver 是否有可靠的方法来检测应用程序退出事件?

java - 无法从 AlarmManager 取消 PendingIntent

android - 在使用 ViewPager 滑动到另一个 fragment 之前控制 EditText 数据

java - ListView.setAdapter NullPointerException

java - 如何停止在每次 Activity 调用时重新创建选项卡