FragmentTransaction使用全解

前言

之前已经写过用Fragment做主界面以及Fragment与Activity通信的文章。两篇文章如下:
ndroid viewpager+fragment做主界面(超容易理解的demo!)
android Fragment与Activity交互,互相发数据(附图详解)

对于Fragment还剩FragmentTransaction没有具体讲到,此篇文章就讲一下FragmentTransaction的主要用法,也是对之前的回顾。

(源码在文章结尾)

简单用法

这里写图片描述
如上是Fragment的简单使用演示,主要代码如下:

        btnMainOne =(Button)findViewById(R.id.btn_main_one);

        btnMainOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mFragmentTransaction=getFragmentManager().beginTransaction();
                mFragmentTransaction.replace(R.id.fl_main,new FragmentOne());
                //设置简单的过度动画
                mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                mFragmentTransaction.commit();
            }
        });

FragmentTransaction使用注意

每次在使用FragmentTransaction的时候都需要重新获取,每一个FragmentTransaction只能够commit()一次。
用代码表示下错误使用:

 btnMainOne =(Button)findViewById(R.id.btn_main_one);
 mFragmentTransaction=getFragmentManager().beginTransaction();

        btnMainOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mFragmentTransaction.replace(R.id.fl_main,new FragmentOne());
                //设置简单的过度动画
                mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                mFragmentTransaction.commit();
            }
        });

错误使用中把FragmentTransaction的获取挪到了点击事件之前,这样在点击第二次的时候就会出现错误。

添加到返回栈

在使用Fragment的时候,我们经常会有一个这样的需求,就是需要通过返回键让fragment回复到之前的一个状态。使用FragmentTransaction就能很容易做到,效果如下:
这里写图片描述

其实主要就是通过addToBackStack()这个方法,在commit()之前使用,能够保留commit之前的状态,在使用返回键时,能够回到之前的状态。
具体代码如下:

这里写代码片

private void initViewTwo() {
        //主要逻辑在MainActivity的onClick中
        btnMainOne =(Button)findViewById(R.id.btn_main_one);
        btnMainOne.setOnClickListener(this);
        btnMainTwo =(Button)findViewById(R.id.btn_main_two);
        btnMainTwo.setOnClickListener(this);
        btnMainThree =(Button)findViewById(R.id.btn_main_three);
        btnMainThree.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        //每次点击事件都会重新获取FragmentTransaction
        mFragmentTransaction=getFragmentManager().beginTransaction();

        switch (v.getId()){
            case R.id.btn_main_one:
                if(fraOne==null){
                    fraOne=new FragmentOne();
                }
                mFragmentTransaction.replace(R.id.fl_main,fraOne);
                mFragmentTransaction.addToBackStack(null);//添加fragment到返回栈
                mFragmentTransaction.commit();
                break;
            case R.id.btn_main_two:
                if(fraTwo==null){
                    fraTwo=new FragmentTwo();
                }
                mFragmentTransaction.replace(R.id.fl_main,fraTwo);
                mFragmentTransaction.addToBackStack(null);//添加fragment到返回栈
                mFragmentTransaction.commit();
                break;
            case R.id.btn_main_three:
                if(fraThree==null){
                    fraThree=new FragmentThree();
                }
                mFragmentTransaction.replace(R.id.fl_main,fraThree);
                mFragmentTransaction.addToBackStack(null);//添加fragment到返回栈
                mFragmentTransaction.commit();
                break;
        }
    }

源码地址:

http://download.csdn.net/detail/double2hao/9769722

  • 11
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FragmentTransaction 是用来管理 Fragment 事务的类,通过它可以执行添加、删除、替换、隐藏、显示等 Fragment 操作。下面是几个常用的操作: 1. 添加 Fragment: ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.add(R.id.container, new MyFragment()); transaction.commit(); ``` 其中 `R.id.container` 指向布局文件中的一个容器,用于放置 Fragment。 2. 替换 Fragment: ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, new MyFragment()); transaction.commit(); ``` 这里使用 `replace` 方法将 `R.id.container` 中的 Fragment 替换为 `MyFragment`。 3. 显示 Fragment: ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.show(myFragment); transaction.commit(); ``` 这里通过 `show` 方法显示 `myFragment`。 4. 隐藏 Fragment: ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(myFragment); transaction.commit(); ``` 这里通过 `hide` 方法隐藏 `myFragment`。 在进行 FragmentTransaction 操作时,一般需要在 `commit` 之前调用 `addToBackStack(null)` 方法将事务添加到返回栈中,便于进行返回操作。 ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, new MyFragment()); transaction.addToBackStack(null); transaction.commit(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值