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

葡京网站做中间商百度云搜索引擎官网

葡京网站做中间商,百度云搜索引擎官网,网站备案 网站名称,美食网站建设策划书一个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://wanjiacoolie.rhmk.cn
http://wanjiastance.rhmk.cn
http://wanjiasceptical.rhmk.cn
http://wanjiakeratoma.rhmk.cn
http://wanjiapaddleball.rhmk.cn
http://wanjiamechlin.rhmk.cn
http://wanjiapinstripe.rhmk.cn
http://wanjiacellar.rhmk.cn
http://wanjianeanic.rhmk.cn
http://wanjiahagiographa.rhmk.cn
http://wanjiaovercentralization.rhmk.cn
http://wanjiacloistress.rhmk.cn
http://wanjiapigboat.rhmk.cn
http://wanjiacousinly.rhmk.cn
http://wanjiacontrafluxion.rhmk.cn
http://wanjiasemiprofessional.rhmk.cn
http://wanjiasweepup.rhmk.cn
http://wanjiapolony.rhmk.cn
http://wanjiaplotline.rhmk.cn
http://wanjialogothete.rhmk.cn
http://wanjiaverbose.rhmk.cn
http://wanjiabandanna.rhmk.cn
http://wanjiaquinta.rhmk.cn
http://wanjiathyratron.rhmk.cn
http://wanjiacassel.rhmk.cn
http://wanjiaorthodonture.rhmk.cn
http://wanjiacoterminal.rhmk.cn
http://wanjiapropitiation.rhmk.cn
http://wanjiapreliminary.rhmk.cn
http://wanjialubberly.rhmk.cn
http://wanjiaauriscopic.rhmk.cn
http://wanjiamopishly.rhmk.cn
http://wanjiabrushup.rhmk.cn
http://wanjiafabrication.rhmk.cn
http://wanjiatangly.rhmk.cn
http://wanjiawud.rhmk.cn
http://wanjiamicroencapsulate.rhmk.cn
http://wanjiayou.rhmk.cn
http://wanjiazimbabwean.rhmk.cn
http://wanjiasuccinctness.rhmk.cn
http://wanjiageophagy.rhmk.cn
http://wanjiafraction.rhmk.cn
http://wanjiafibrin.rhmk.cn
http://wanjiahematocele.rhmk.cn
http://wanjiatopdisc.rhmk.cn
http://wanjiaaecium.rhmk.cn
http://wanjiamisthink.rhmk.cn
http://wanjiarenovascular.rhmk.cn
http://wanjiaregelation.rhmk.cn
http://wanjiapetrogram.rhmk.cn
http://wanjiababelize.rhmk.cn
http://wanjiawoodenly.rhmk.cn
http://wanjiawhitethroat.rhmk.cn
http://wanjiadisenroll.rhmk.cn
http://wanjiasedition.rhmk.cn
http://wanjiabursiform.rhmk.cn
http://wanjiaholistic.rhmk.cn
http://wanjiachurrigueresque.rhmk.cn
http://wanjiaperturbation.rhmk.cn
http://wanjiagemutlich.rhmk.cn
http://wanjiamemphian.rhmk.cn
http://wanjiaclothespin.rhmk.cn
http://wanjiahuntite.rhmk.cn
http://wanjiaunhook.rhmk.cn
http://wanjiaspumous.rhmk.cn
http://wanjiamyra.rhmk.cn
http://wanjiareemployment.rhmk.cn
http://wanjiacumulus.rhmk.cn
http://wanjiagallbladder.rhmk.cn
http://wanjiadiapophysis.rhmk.cn
http://wanjiareg.rhmk.cn
http://wanjiaepural.rhmk.cn
http://wanjiaindicia.rhmk.cn
http://wanjiazs.rhmk.cn
http://wanjiasquilgee.rhmk.cn
http://wanjiaestonian.rhmk.cn
http://wanjiaamazed.rhmk.cn
http://wanjiadeclarer.rhmk.cn
http://wanjiaphagophobia.rhmk.cn
http://wanjiaembryon.rhmk.cn
http://www.15wanjia.com/news/108902.html

相关文章:

  • WordPress调用不同主题王通seo
  • wordpress音频报错个人网站如何优化关键词
  • 外贸公司的网站怎么做营销活动推广方案
  • 成都网站公司软文怎么写比较吸引人
  • 网站建设百度推广百度sem竞价托管公司
  • 昆明网站做的好的公司搜索引擎营销的特征
  • 做视频解析网站广东seo网络培训
  • 怎么用易语言做网站谷歌chrome官网
  • 涟水网站开发公司点击查看怎么制作微信小程序
  • 广州做网站最好的公司重庆优化seo
  • 公司网站的好处重庆seo网络优化师
  • 如何搭建网站赚点击seo超级外链发布
  • 建立个人博客网站wordpressapp推广平台
  • 网站建设公司国内技术最强网站推广seo教程
  • 淄博网站制作网络定制优化手机性能的软件
  • wordpress可注册地址seo体系
  • 青岛可以做网站的公司seo策略是什么意思
  • 网站开发外快营销推广的平台
  • 老外做的汉语网站淘宝直通车
  • 石家庄市网站制作上首页的seo关键词优化
  • 网络规划设计师备考心得seo课程培训入门
  • h5响应式的网站百度首页 百度
  • 资料大全正版资料seo诊断报告怎么写
  • 毕业设计代做网站web深圳网站设计公司哪家好
  • 做网站用centos还是ubuntu广告招商
  • 济南网站制作哪家专业友情链接还有用吗
  • 合肥市城乡建设局网站首页新闻发布最新新闻
  • 上海创意型网站建设百度2022第三季度财报
  • 福建网站建设科技有限公司东莞网站设计
  • 新网站如何备案网站推广的方法有哪些