我有一些简单的代码,其中我用另一个片段替换了一个片段。我所看到的问题是,新的片段从来没有调用过它的任何创建、/attach等生命周期。
代码如下:
String SERVER="SERVER";
android.support.v4.app.FragmentManager fm = getChildFragmentManager();
FragmentTransaction ft = fm.beginTransaction().setCustomAnimations(R.anim.pop_enter, R.anim.pop_exit );
Fragment s = fm.findFragmentByTag(SERVER);
if(s == null ) s = new ServerFragment();
ft.replace(R.id.fragment_container, s, SERVER);
ft.show(s);
ft.commit();
boolean result = fm.executePendingTransactions();
//Validate if added
Fragment frag = fm.findFragmentByTag(SERVER);
frag.isAdded(); //Returns FALSE!我希望isAdded方法返回True,而且关键的是,我还希望调用常用的片段生命周期方法。然而,情况并非如此。
有什么想法会非常感谢吗?
问候
发布于 2014-04-11 08:32:13
这里不是肯定的,但似乎因为您每次都创建一个新的片段,而不是显式地销毁旧的ServerFragments,所以findFragmentByTag很可能会找到创建的第一个片段,这不会为isAdded()返回true,因为它已经从视图层次结构中删除了。
如果这是正确的,那么您应该看到isAdded()调用在第一次调用该方法时返回true,之后就不会再返回true了
发布于 2014-04-11 09:27:55
我相信有一个函数可以执行挂起的事务,里面有immediate这个词。它使事务立即发生,而不是在程序到达它时。
https://stackoverflow.com/questions/23001412
复制相似问题