一、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 11After 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.ReturnsReturns true if there were any pending transactions to be executed.

 

更多相关文章

  1. Android主线程与子线程的关系
  2. android 在android中教你一行代码判断是不是主线程
  3. android 主线程和子线程之间的消息传递
  4. Android主线程与子线程之沟通
  5. 【Android自助餐】Handler消息机制完全解析(二)MessageQueue的队列
  6. Android UI主线程与子线程
  7. android主线程中Looper.loop()为什么不会造成程序ANR
  8. android利用handler回到主线程
  9. webservice1(队列上传 呼叫)

随机推荐

  1. 手把手教你搞定权限管理,结合Vue实现菜单
  2. mall在Linux环境下的自动化部署(基于Jenki
  3. 商品SKU功能设计与优化
  4. MySql主从复制,从原理到实践!
  5. 涵盖大部分核心组件使用的 Spring Cloud
  6. 盘点下我用的顺手的那些工具!
  7. 虚拟机安装及使用Linux,看这一篇就够了!
  8. SpringBoot中处理校验逻辑的两种方式,真的
  9. 2016, 微信'应用号'可能横空出世!
  10. 一个不容错过的Spring Cloud实战项目!