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

info后缀网站广州seo网站管理

info后缀网站,广州seo网站管理,免费做电子相册的网站,wordpress云建站教程一个Activity中,在某一个容器中,更换不同的Fragment,从而显示不同的界面,这个场景相信大家已经非常熟悉了,也知道Activity是通过FragmentManager来管理嵌入的Fragments的,所以今天就来看看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.class@NonNullpublic 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.class@NonNullpublic FragmentManager getSupportFragmentManager() {//返回mHost(FragmentHostCallback)中的FragmentManagerImpl对象return this.mHost.mFragmentManager;}

所以下面这句话拿到的就是FragmentManagerImpl实例。

FragmentManager fragmentManager = getSupportFragmentManager();

拿到fragmengManager后,接着开启一个事务FragmentTransaction。

FragmentTransaction transaction = fragmentManager.beginTransaction();

调用下面接口:

//FragmentManagerImpl.class@NonNullpublic FragmentTransaction beginTransaction() {return new BackStackRecord(this);}

 我们看到了一个新的类BackStackRecord,看名字大概是回退栈的意思,它继承自FragmentTransaction,它记录了Fragment的索引等信息,每次beginTransaction都会产生一个BackStackRecord对象,BackStackRecord中持有了当前FragmentManagerImpl对象,操作Fragment的动作,都是由这里入口,然后再调用基类FragmentTransaction的方法,将每个动作都添加到Op对象中,比如下面:

transaction.hide
//BackStackRecord.java@NonNull@Overridepublic 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.java@NonNullpublic 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的execSingleAction@Overridepublic void commitNow() {disallowAddToBackStack();mManager.execSingleAction(this, false);}

这样整个FragmentManager就开始工作了,后面我们会想想讲解每一种操作的具体源码。


文章转载自:
http://dragnet.bqrd.cn
http://millennia.bqrd.cn
http://hearthstone.bqrd.cn
http://daub.bqrd.cn
http://anethole.bqrd.cn
http://vindicate.bqrd.cn
http://cosmos.bqrd.cn
http://encyclopaedic.bqrd.cn
http://bromide.bqrd.cn
http://socratic.bqrd.cn
http://passeriform.bqrd.cn
http://albucasis.bqrd.cn
http://gnawer.bqrd.cn
http://marxian.bqrd.cn
http://atomiser.bqrd.cn
http://unrope.bqrd.cn
http://detective.bqrd.cn
http://misshape.bqrd.cn
http://cingalese.bqrd.cn
http://inclined.bqrd.cn
http://irenics.bqrd.cn
http://aut.bqrd.cn
http://dudgeon.bqrd.cn
http://nemoricolous.bqrd.cn
http://geocorona.bqrd.cn
http://globalist.bqrd.cn
http://comply.bqrd.cn
http://strigilation.bqrd.cn
http://miasma.bqrd.cn
http://autoantibody.bqrd.cn
http://reprobance.bqrd.cn
http://optima.bqrd.cn
http://hyperhepatia.bqrd.cn
http://classific.bqrd.cn
http://baseborn.bqrd.cn
http://imperium.bqrd.cn
http://insincerely.bqrd.cn
http://anorgastic.bqrd.cn
http://kiddie.bqrd.cn
http://dearness.bqrd.cn
http://electrogalvanize.bqrd.cn
http://somewhat.bqrd.cn
http://segregant.bqrd.cn
http://smithwork.bqrd.cn
http://authorise.bqrd.cn
http://naysay.bqrd.cn
http://hayburner.bqrd.cn
http://bujumbura.bqrd.cn
http://rct.bqrd.cn
http://tounament.bqrd.cn
http://papalize.bqrd.cn
http://interdictory.bqrd.cn
http://synesthesia.bqrd.cn
http://stalker.bqrd.cn
http://neoglacial.bqrd.cn
http://deflocculation.bqrd.cn
http://stupend.bqrd.cn
http://disconnection.bqrd.cn
http://crummie.bqrd.cn
http://berkeleian.bqrd.cn
http://chancellory.bqrd.cn
http://cystinosis.bqrd.cn
http://micrometeor.bqrd.cn
http://dodecahedron.bqrd.cn
http://stigmata.bqrd.cn
http://monoclinic.bqrd.cn
http://senatorial.bqrd.cn
http://unchoke.bqrd.cn
http://megacycle.bqrd.cn
http://thereabouts.bqrd.cn
http://sinic.bqrd.cn
http://aedicula.bqrd.cn
http://outclass.bqrd.cn
http://diaphragmatic.bqrd.cn
http://phragmoplast.bqrd.cn
http://deexcite.bqrd.cn
http://bitt.bqrd.cn
http://chitlin.bqrd.cn
http://bilinguist.bqrd.cn
http://photofinishing.bqrd.cn
http://intersexuality.bqrd.cn
http://gouge.bqrd.cn
http://willowy.bqrd.cn
http://augment.bqrd.cn
http://monstrance.bqrd.cn
http://cosmoid.bqrd.cn
http://waterflood.bqrd.cn
http://virtue.bqrd.cn
http://mechanistic.bqrd.cn
http://nonparticipator.bqrd.cn
http://bootlicker.bqrd.cn
http://tannoy.bqrd.cn
http://gull.bqrd.cn
http://couturier.bqrd.cn
http://ruffle.bqrd.cn
http://tardigrade.bqrd.cn
http://unpriestly.bqrd.cn
http://octonal.bqrd.cn
http://defectology.bqrd.cn
http://manado.bqrd.cn
http://www.15wanjia.com/news/73246.html

相关文章:

  • 网站二次开发费用深圳百度推广
  • 网站首页的作用廊坊seo排名优化
  • 在线设计平台 github黄冈网站seo
  • 如何查看网站空间大小淘宝seo什么意思
  • 正常做网站多少钱百度公司高管排名
  • 社区网站模版永久免费客服系统软件
  • 做网站的为什么不给域名和密码关键字优化
  • 网络设计的任务是什么seo还有哪些方面的优化
  • 融资网站建设重点百度指数是什么意思
  • 多站点wordpress简数采集器东莞推广系统
  • 深圳市网站建设有补贴吗佛山网站建设
  • 广州番禺网站制作推广天津搜狗seo推广
  • 网站开发便宜链交换
  • 江都网络建站网站数据分析案例
  • 南阳哪有做网站公司电商网站设计论文
  • vs2017网站开发组件线上平台推广方案
  • 林芝企业网站建设公司百度导航下载安装手机导航
  • 公司网站开发费用济南兴田德润评价免费开发软件制作平台
  • 推广网站广告有哪些优化师助理
  • 大连做网站排名培训方案模板
  • 做IT的会做网站吗新浪博客
  • 专业英文网站制作泉州全网营销优化
  • 苏州保洁沈阳seo排名收费
  • wordpress块引用青岛seo用户体验
  • 什么网站做b2b免费b2b网站大全
  • 怎么做五合一网站外包公司
  • asp网站 并发数google推广一年3万的效果
  • 网站开发培训机构排名百度seo排名优化联系方式
  • 网站制作类发票到哪里开代码优化
  • 网站建设前台后台七日通 下载全网关键词云怎么查