为了账号安全,请及时绑定邮箱和手机立即绑定

fragment切换简单实现

标签:
Android

fragment切换我总结了以下三种方法:
1、用FragmentTransacton类的remove()方法移除所有不显示的fragment,用它的add()添加要显示的fragment;
2、直接使用FragmentTransaction类的replace()方法加载要显示的fragment;
3、用FragmentTransAction类的hide()方法先将所有fragment隐藏掉,
再用它的show()方法显示要显示的fragment。

第一种方法极度不建议使用,因为它具有破坏性;第二种次之,所以这里我要讲的是第三种[/滑稽护体],不使用第二种的另外一个原因是它会重复加载数据;当然,会使用懒加载的道友可以忽略这一点。

首先我们需要一个管理类:FragmentManager,然后还需要一个事务管理类:

    FragmentManager fm;
    FragmentTransaction transaction;

我们将所有Fragment装到一个集合里面,因为这里我只讲怎么切换fragment,还不会使用Fragment的可以参考这篇文章:Fragment的简单使用

List<Fragment> fragments = new ArrayList<>();

我们在onCreate()方法中将FragmentManager对象实例化:

   fm = getSupportFragmentManager();

我们定义一个方法,传入一个基本整型参数,我不说这个参数是干嘛的,相信你也知道,不知道的猜一下。

 private void showWho(int index){  //TODO implemention}

在showWho()方法中插入以下代码:

  transaction=fm.beginTransaction();        //隐藏fragments集合中的所有Fragment
           for (int i = 0; i < fragments.size(); i++) {               try{
                   transaction.hide(fragments.get(i));
               }catch (NullPointerException e){
                   Log.i("err================>","指定Fragment还没加入FragmentTransaction中");
               }//               transaction.remove(fragments.get(i));
           }//如果指定的Fragment还没添加到transaction对象中,则先添加,再显示,否则直接显示
           if (fragments.get(index).isAdded()){
               transaction.show(fragments.get(index));
           }else {
               transaction.add(android.R.id.content, fragments.get(index));
               transaction.show(fragments.get(index));
           }  //      提交操作
           transaction.commit();

然后在需要的位置调用showWho()方法即可,一般在初始化的时候调用一次,然后在控件的点击事件调用一次。别忘了传递参数喔



作者:Mingho96
链接:https://www.jianshu.com/p/cfb453a3a26b


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消