Fragment的编辑-增删查替显示隐藏


Fragment作为Android页面中的一种“片段”提高了页面View操控的灵活性和统一性。本文将介绍如何操控Fragment,使之满足我们对页面的不同变化需求。主要包括:添加Fragment、移除Fragment、替换Fragment、查找Fragment、隐藏Fragment、显示Fragment、Attach/Detach Fragment等内容。

1. 添加Fragment

主要方法

// 1.准备FragmentManager 和 FragmentTransaction
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// 2.创建Fragment
FragmentA fragmentA = new FragmentA();
// 3.添加Fragment (不要忘记最后的commit)
fragmentTransaction.add(R.id.fragment_container1, fragmentA).commit();
// 或者:fragmentTransaction.add(R.id.fragment_container1, FragmentA.class, null).commit();

代码示例

首先,准备一个Fragment类

// 导包省略。。。
public class FragmentA extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_a, container, false);
    }
}

然后,将它添加到Activity里

// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2.创建Fragment
        FragmentA fragmentA = new FragmentA();
        // 3.添加Fragment (不要忘记最后的commit)
        fragmentTransaction.add(R.id.fragment_container1, fragmentA).commit();
    }
}

这里还有一种添加Fragment的方式,前面的文章里也介绍过,此处也列举出来吧。

// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2. 添加Fragment, (第二个参数:Fragment的Class类型,意味着Fragment的创建方式是使用的默认构造函数;第三个参数为Bundle类型,向Fragment传递参数)
        fragmentTransaction.add(R.id.fragment_container1, FragmentA.class, null).commit();
    }
}

2. 查找Fragment

主要方法

fragmentManager.findFragmentById(R.id.fragment_container);
fragmentManager.findFragmentByTag("fragmentTag");

代码示例

// Fragment类和上面例子一样,先添加Fragment,此处省略,然后用下面方式查找
// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备 FragmentManager
        FragmentManager fragmentManager = getSupportFragmentManager();
        // 2.使用 FragmentManager 查找 fragment容器最上面的一个Fragment
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);

        // 或者 根据Tag找Fragment
        Fragment fragment2 = fragmentManager.findFragmentByTag("fragmentTag");
    }
}

3. 移除Fragment

删除Fragment的前提是要先找到该Fragment,才能知道要删除的是哪一个Fragment。

主要方法

Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
fragmentTransaction.remove(fragment).commit();

代码示例

// Fragment类和上面例子一样,先添加fragment,然后用下面代码进行移除操作
// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2.使用 FragmentManager 查找 要移除的fragment
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
        // 3.移除目标Fragment
        fragmentTransaction.remove(fragment).commit();
    }
}

4. 替换Fragment

将当前Fragment容器上的Fragment替换为新的Fragment。其实,也是添加Fragment的一种方式,只不过添加之前把已有的Fragment先移除。

主要方法

fragmentTransaction.replace(R.id.fragment_container1, fragmentA).commit();
// 或者fragmentTransaction.replace(R.id.fragment_container1, FragmentA.class, null).commit();

代码示例

// Fragment类和上面例子一样
// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2.创建Fragment
        FragmentA fragmentA = new FragmentA();
        // 3.将当前Fragment容器上的Fragment替换为新的Fragment (不要忘记最后的commit)
        fragmentTransaction.replace(R.id.fragment_container1, fragmentA).commit();
        // 或者 fragmentTransaction.replace(R.id.fragment_container1, FragmentA.class, null).commit();
    }
}

5. 隐藏/显示Fragment

Fragment作为控件的集合体,可以方便对多个控件统一管理,也就是统一显示/隐藏。该过程,Framgent生命周期没有变化
等价于对View设置View.INVISIBLE

主要方法

fragmentTransaction.hide(fragment).commit();
fragmentTransaction.show(fragment).commit();

代码示例

// Fragment类和上面例子一样,先添加fragment,然后用下面代码进行操作
// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2.使用 FragmentManager 查找要隐藏的fragment
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
        // 3.隐藏目标Fragment,等价于 findViewById(R.id.fragment_container).setVisibility(View.INVISIBLE);
        fragmentTransaction.hide(fragment).commit();
		// 4.显示目标Fragment,等价于 findViewById(R.id.fragment_container).setVisibility(View.VISIBLE);
		// fragmentTransaction.show(fragment).commit();
    }
}

6. Attach/Detach Fragment

使界面上一个Fragment消失除了移除、隐藏,还有Detach。
Detach,翻译为“分离,解除”,这里就是将Fragment上的View从Container移除,然后View销毁。
该Fragment将执行生命周期方法:—onPause-----onStop----onDestroyView-----,但并不会继续执行onDestory,也就是Fragment没有完全销毁。
对应的,Attach,翻译为“绑定,附上”,这里就是将刚才detach的Fragment,重新再attach上,是一个相反的过程,伴随着View的重新创建。这个过程该Fragment将执行生命周期方法:—onCreateView-----onViewCreated----onActivityCreated----onStart-----onResume—

主要方法

fragmentTransaction.attach(fragment).commit();
fragmentTransaction.detach(fragment).commit();

代码示例

// Fragment类和上面例子一样,先添加fragment,然后用下面代码进行操作
// 导包省略。。。
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 1.准备FragmentManager 和 FragmentTransaction
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 2.使用 FragmentManager 查找 要detach的fragment
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
        // 3.detach目标Fragment
        fragmentTransaction.detach(fragment).commit();
		// 4.attach目标Fragment
		// fragmentTransaction.attach(fragment).commit();
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值