Android Fragment使用心得

Fragment是Android3.0引入的新特性,常用于平板和手机UI模块化管理。它被视为Activity的一部分,有自己的生命周期,但受宿主Activity影响。核心要点包括:Fragment需要在Activity中使用,不推荐在Fragment内嵌套Fragment,且至少需要实现onCreateView()。Fragment有Resumed、Paused、Stopped三种状态,当Activity被销毁或后台时,Fragment也会受到影响。

首先,什么是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);
    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值