Android布局 Fragment

一.

Fragment不能单独使用,需添加到Activity中。有两种添加方式,分别是布局文件和动态添加。

动态添加:首先获取Fragment的实例对象,然后获取FragmentManager对象,调用FragmentManager 的beginTransaction ()方法开启事物并得到FragmentTransaction 对象,最后调用FragmentTransaction 的add()方法将Fragment添加到Activity中,并通过commit()方法提交事物。

//实例化Fragment对象
NewsListFragment fragment = new NewsListFragment ();
//获取FragmentManager实例
FragmentManager fm = getFragmentManager();
//获取FragmentTransaction实例
FragmentTransaction beginTransaction = fm.beginTransaction ();
//添加一个Fragment
beginTransaction .add(R.id.ll,fragment);
//提交
beginTransaction .commit();

add(int containerViewId , Fragment fragment)方法:第一个参数表示Fragment要放入ViewGroup的资源id,第二个参数是要添加的Fragment。

在Activity中获取Fragment实例:
findFragmentById()方法用于从布局文件中获取Fragment实例,参数为Fragment在Activity布局中的id。

SettingListFragment fListFragment = (SettingListFragment) getFragmentManager()
                                    .findFragmentById(R.id.settingcontent);

在Fragment中获取Activity实例:

MainActivity activity = (MainActivity) getActivity();

当Fragment需要Conrext对象时,也可以使用这个方法。

Fragment与Fragment之间的通信:
首先需要在Fragment中获取Activity是实例对象,然后通过Activity实例获取另外一个Fragment的实例,这样就实现了Fragment与Fragment之间的通信了。

二.

add() 与 replace() 两种方式添加:
add() :以add方式加入Fragment,底层的Fragment被覆盖,当按下返回键时,当前Fragment弹出返回栈,底层Fragment直接显示出来,无需重建。

replace() :以replace方式加入Fragment,底层Fragment被替换(replace嘛),当按下返回键时,当前Fragment弹出返回栈,底层Fragment需要重建。然后再显示出来。

fragment的 隐藏hide()、显示show():

FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(mFragment1);              //隐藏
transaction.show(mFragment2);              //显示
transaction.commit();

注意每一次显示和隐藏都要重新创建
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();

Tag

activity.ft.add(R.id.fLayout_content,  fragment_Mine ,"666");

使用tag的好处是后续我们可以从FragmentManager中查找Fragment对象。

Fragment fragment = getSupportFragmentManager().findFragmentByTag("666");

executePendingTransactions() 方法:
commit()方法并不立即执行transaction中包含的动作,而是把它加入到UI线程队列中.如果想要立即执行,可以在commit之后立即调FragmentManager的executePendingTransactions()方法。

activity.ft.commit();
activity.getFragmentManager().executePendingTransactions();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容