Android Fragment 问题汇总

一、FramentManager.findFragmentByTag() returns null

        getFragmentManager().beginTransaction()
                .replace(R.id.graph_fragment_holder, new GraphFragment(), "GRAPH_FRAGMENT")
                .commit();

        //getFragmentManager().executePendingTransactions();

        GraphFragment graphFragment = (GraphFragment)getFragmentManager()
                                      .findFragmentByTag("GRAPH_FRAGMENT");
        graphFragment.setData(data); // error graphFragment is null

代码如上所示,结果获取到的graphFragment 为null,这下子百思不得其解。最后发现FragmentTransaction提交一个新的fragment会先将该fragment加入到主线程队列。所以立刻去获取findFragmentByTag,返回的是null。

解决方案是在commit后,添加 getFragmentManager().executePendingTransactions(); 官方注释如下,会立刻执行。

public abstract boolean executePendingTransactions ()

Added in API level 11
After a FragmentTransaction is committed with FragmentTransaction.commit(), 
it is scheduled to be executed asynchronously on the process's main thread. 
If you want to immediately executing any such pending operations, 
you can call this function (only from the main thread) to do so. 
Note that all callbacks and other related behavior will be done from within this call, 
so be careful about where this is called from.

Returns
Returns true if there were any pending transactions to be executed.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值