看别人代码总能看到一些之前没见过的东西,不久前,对于fragment的加载我一般按照最基本的方式,步骤如下:
FragmentManager fragmentManager= getSupportFragmentManager();// 获取fragmentManager
FrangmentTransaction fragmentTransactio=fragmentManager.beginTransaction();// 得到fragmentTransaction对象
fragmentTransaction.replace(R.id.frg_container,fragment_homepage); // 将fragment加载到指定位置
fragmentTransaction.commit();
在进行切换的时候,先隐藏其他不需要的fragment,再判断当fragment是否加载到了当前activity中,如果没有加进来,调用transaction的add方法添加
进来,如果之前已经在加入进了当前activity,显示即可。代码思路如下:
if (otherFragment.isAdded()) {//如果其他某个fragment已经加入进了当前activity,隐藏她,然后加载需要显示
// 的fragment fragmentTransaction.hide(otherFragment); }
if (currentFragment.isAdded()) { // 如果需要加载的进程已经加载了activity中,显示即可
fragmentTransaction.show(currentFragment).commit();
} else { // 如果需要加载的进程没有加载到activity中,则加入进来即可。
fragmentTransaction.add(R.id.frg_container, currentFragment).commit();
}
这是以前的思路,这两天发现一个有意思的类FragmentTabHost,可以更简单的实现上述功能,简单的使用过程如下。
1.这个类是V4包中的类,使用前需要引入v4包,如果在android studio环境中,在build.gradle中添加
compile'com.android.support:support-v4:23.0.0' ,最后的release号,不唯一。
2.activity继承FragmentActivity。
3.在activity中创建FragmentTabHost对象,与布局中的类建立引用关系。
host = (FragmentTabHost) findViewById(R.id......);
4.调用host的setup方法
host.setUp(context , getSupportFragmentManager() , R.id.container);
最后一个参数是用来加载fragment的布局的id。
5.为每一个tab按钮设置图标,文字和内容
TabHost.TabSpec tabSpec = mTabHost.newTabSpec("文字").setIndicator(view);
最后一个参数view,可以自行设计。
6.将tab按钮添加进入到tab选项卡中,并与fragment绑定
host.addTab(tabSpec , fragment , null);
这样在点击第五步的view时候,就可以实现fragment的切换了。而且不需要想之前那样对fragment是否加载进入到当前activity中进行讨论了。