首先,什么是Fragment?下面是菜鸟教程上的资料
Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!
Fragment的生命周期图
核心要点:
下面说下使用Fragment的一些要点:
- 3.0版本后引入,即minSdk要大于11
- Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套 的Fragment也是需要嵌套在Activity中的,间接地说,Fragment还是需要嵌套在Activity中!! 受寄主Activity的生命周期影响,当然他也有自己的生命周期!另外不建议在Fragment里面 嵌套Fragment因为嵌套在里面的Fragment生命周期不可控!!!
- 官方文档说创建Fragment时至少需要实现三个方法:onCreate( ),onCreateView( ),OnPause( ); 不过貌似只写一个onCreateView也是可以的...
- Fragment的生命周期和Activity有点类似:三种状态:
Resumed:在允许中的Fragment可见
Paused:所在Activity可见,但是得不到焦点
Stoped: ①调用addToBackStack(),Fragment被添加到Bcak栈 ②该Activity转向后台,或者该Fragment被替换/删除
ps:停止状态的fragment仍然活着(所有状态和成员信息被系统保持着),然而,它对用户 不再可见,并且如果activity被干掉,他也会被干掉.
Fragment类在继承的时候一般选择
extends android.app.Fragment
如果用的是android.support.v4.app.Fragment这个包,不能兼容高版本的API
Fragment在Activity的替换Framelayout,可以有多个Fragment
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { //本身就是一个RadioGroup监听器 private RadioGroup rg_tab_bar; private RadioButton rb_better; //Fragment Object private MeFragment fg_me; private HomeFragment fg_home; private SetFragment fg_set; private FragmentManager fManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取FragmentManager管理器 fManager = getFragmentManager(); rg_tab_bar = (RadioGroup) findViewById(R.id.rg_tab_bar); rg_tab_bar.setOnCheckedChangeListener(this); //获取第二个单选按钮,并设置其为选中状态 rb_better = (RadioButton) findViewById(R.id.rb_better); rb_better.setChecked(true); } //重写onCheckChanged函数,当checkeId发生改变时,调用该函数 @Override public void onCheckedChanged(RadioGroup group, int checkedId) { //打开事务 FragmentTransaction fTransaction = fManager.beginTransaction(); hideAllFragment(fTransaction); switch (checkedId){ case R.id.rb_channel: if(fg_me == null){ fg_me = new MeFragment("Me页面"); fTransaction.add(R.id.ly_content,fg_me); }else{ fTransaction.show(fg_me); } break; case R.id.rb_better: if(fg_home == null){ fg_home = new HomeFragment("Home页面"); fTransaction.add(R.id.ly_content,fg_home); }else{ fTransaction.show(fg_home); } break; case R.id.rb_setting: if(fg_set == null){ fg_set = new SetFragment("Set页面"); fTransaction.add(R.id.ly_content,fg_set); }else{ fTransaction.show(fg_set); } break; } fTransaction.commit(); } //隐藏所有Fragment private void hideAllFragment(FragmentTransaction fragmentTransaction){ if(fg_me != null)fragmentTransaction.hide(fg_me); if(fg_home != null)fragmentTransaction.hide(fg_home); if(fg_set != null)fragmentTransaction.hide(fg_set); } }