我正在尝试替换容器中的 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/