当前位置: 首页 > news >正文

网站与建设实训报告安钢贴吧

网站与建设实训报告,安钢贴吧,一个公司的网址,手机网站相关一个Activity中#xff0c;在某一个容器中#xff0c;更换不同的Fragment#xff0c;从而显示不同的界面#xff0c;这个场景相信大家已经非常熟悉了#xff0c;也知道Activity是通过FragmentManager来管理嵌入的Fragments的#xff0c;所以今天就来看看FragmentManager是…一个Activity中在某一个容器中更换不同的Fragment从而显示不同的界面这个场景相信大家已经非常熟悉了也知道Activity是通过FragmentManager来管理嵌入的Fragments的所以今天就来看看FragmentManager是如何工作的。 我们以继承AppCompatActivity来分析。 我们常用的几种操作大致如下 FragmentManager fragmentManager getSupportFragmentManager(); Fragment f1 new Fragment(); FragmentTransaction transaction fragmentManager.beginTransaction(); transaction.add(f1,tag); transaction.hide(f1); transaction.show(f1); transaction.replace(R.id.layout1,f1); transaction.remove(f1); 首先我们要获得FragmentManager对象实例。 FragmentManager fragmentManager getSupportFragmentManager(); 那我们就看看getSupportFragmentManager干了什么。 FragmentActivity.classNonNullpublic FragmentManager getSupportFragmentManager() {return this.mFragments.getSupportFragmentManager();} mFragments是 FragmentController 实例声明时直接初始化final对象。 final FragmentController mFragments FragmentController.createController(new HostCallbacks()); 这了出现了一个HostCallbacks继承自FragmentHostCallback看看它的初始化。 public HostCallbacks() {super(FragmentActivity.this); }基类构造如下FragmentHostCallback(NonNull FragmentActivity activity) {this(activity, activity, new Handler(), 0);}FragmentHostCallback(Nullable Activity activity, NonNull Context context, NonNull Handler handler, int windowAnimations) { //实际执行操作的是FragmentManagerImpl实例this.mFragmentManager new FragmentManagerImpl();this.mActivity activity;this.mContext (Context)Preconditions.checkNotNull(context, context null); //handler后面会用到this.mHandler (Handler)Preconditions.checkNotNull(handler, handler null);this.mWindowAnimations windowAnimations;} 重点是FragmentManagerImpl具体的操作都交给了FragmentManagerImpl对象。 再回到FragmentController.createController通过传递HostCallbacks参数将对属性mHost赋值。 private FragmentController(FragmentHostCallback? callbacks) {this.mHost callbacks;} 这样的话FragmentController mFragments就初始化完成。回过头来再看getSupportFragmentManager的过程 //FragmentActivity.classpublic FragmentManager getSupportFragmentManager() {//调用FragmentController的getSupportFragmentManagerreturn this.mFragments.getSupportFragmentManager();}//FragmentController.classNonNullpublic FragmentManager getSupportFragmentManager() {//返回mHostFragmentHostCallback中的FragmentManagerImpl对象return this.mHost.mFragmentManager;} 所以下面这句话拿到的就是FragmentManagerImpl实例。 FragmentManager fragmentManager getSupportFragmentManager(); 拿到fragmengManager后接着开启一个事务FragmentTransaction。 FragmentTransaction transaction fragmentManager.beginTransaction(); 调用下面接口 //FragmentManagerImpl.classNonNullpublic FragmentTransaction beginTransaction() {return new BackStackRecord(this);} 我们看到了一个新的类BackStackRecord看名字大概是回退栈的意思它继承自FragmentTransaction它记录了Fragment的索引等信息每次beginTransaction都会产生一个BackStackRecord对象BackStackRecord中持有了当前FragmentManagerImpl对象操作Fragment的动作都是由这里入口然后再调用基类FragmentTransaction的方法将每个动作都添加到Op对象中比如下面 transaction.hide //BackStackRecord.javaNonNullOverridepublic FragmentTransaction hide(NonNull Fragment fragment) {if (fragment.mFragmentManager ! null fragment.mFragmentManager ! mManager) {throw new IllegalStateException(Cannot hide Fragment attached to a different FragmentManager. Fragment fragment.toString() is already attached to a FragmentManager.);}return super.hide(fragment);}//FragmentTransaction.javaNonNullpublic FragmentTransaction hide(NonNull Fragment fragment) {//添加Op到操作列表中addOp(new Op(OP_HIDE, fragment));return this;} 当添加完一系列的动作后操作并没有生效我们需要调用commit或者commitNow来提交事务才能看到最终的结果。 commit不会立即执行它会把事务放在队列里会在线程下一次执行时进行操作。 //commit调用commitInternalint commitInternal(boolean allowStateLoss) {......mManager.enqueueAction(this, allowStateLoss);return mIndex;} commitNow会立即执行事务。 //commitNow会调用FragmentManagerImpl的execSingleActionOverridepublic void commitNow() {disallowAddToBackStack();mManager.execSingleAction(this, false);} 这样整个FragmentManager就开始工作了后面我们会想想讲解每一种操作的具体源码。
http://www.dnsts.com.cn/news/142890.html

相关文章:

  • 建材城电商网站建设一站式做网站企业
  • 威海泰浩建设集团有限公司网站网站这么建设
  • 网站主机服务器广西桂林电子科技大学
  • 网站建设报价单-中英文版有哪些外贸公司网站做的比较好
  • 丹阳网站建设公司静态网站制作价格
  • 别人建的网站怎么修改代码网站制作怎样盈利
  • 收费看电影网站建设h5网页游戏
  • 重庆市建设银行网站首页手机app开发培训课程
  • 网站正在备案中模板天津网站建设方案服务
  • 手机网站优化排名怎么做视频剪辑自学网站
  • asp网站制作软件品牌营销是什么
  • 牛商网做网站多少钱微信电商
  • 网站建设注意事项知乎iis7搭建aspx网站
  • 营销网站建设的步骤深圳建站定制公司
  • 电子商务网站建设实训过程网站和域名区别
  • 广西柳州网站建设网站开发员一月多少工资
  • 湛江专业建站推荐扬州自适应网站建设
  • 网站建设怎么管理业务员东莞关键词seo优化
  • 网站上的二维码怎么做黄页荔枝抖音
  • 做网站学哪方面知识免费网站建设哪个好?
  • 佛山外贸网站建设行情cms自助建站
  • 保健品网站可以做网站11电影网
  • 贵州水利建设官方网站怎么做类似淘宝网站
  • 天水网站开发技术招聘jq效果较多的网站
  • 学校网站模板图片企业seo关键词优化
  • 建设银行关闭网站查询信用卡账单注册小程序需要什么条件
  • 平台网站开发公司组织架构wordpress 禁止评论
  • 福州网站建设公司哪家好网站如何做市场推广
  • 软件免费开发网站建设大型用户网站建设
  • 西安三网合一网站建设广州网站建设服务