安卓中用show()和hide()方法来代替转跳fragment的replace()方法

来源:互联网 发布:管理决策软件 编辑:程序博客网 时间:2024/04/28 08:18

   用show()和hide()方法来代替转跳fragment的replace()方法,来“保存”上一个fragment的位置
开始学习fragment的时候基本上都是使用如下代码来实现

public  void changerButton(Fragment fragment,String s){     FragmentManager aa=getSupportFragmentManager();       FragmentTransaction bb= aa.beginTransaction();       bb.replace(R.id.fragment,fragment,s);       bb.commit();  }

   初学的时候基本上都是使用到了replace方法,但是在目前已经很成熟的开发中,却很少使用replace方法(),为什么呢,因为比如说你在某个新闻客户端,看新闻的时候,一不小心手滑点到了旁边的视频按钮。因为刚才的新闻很有趣,然后你有点回新闻按钮,但是这时候如果你是使用的是replace()方法的话,你在从视频的fragment界面转跳会新闻的fragment界面的时候,并不会回到你上次阅读的地方。那这样就很操蛋啊,刚才那条新闻好不容易找到的,在会去找么??!!。这个就是使用replace()方法的缺点。

   这时候咱们来使用另一种转跳fragment界面的方法,说是转跳不如说是显示更加贴切一点。代码如下

public void changedfragment(int j) {        FragmentTransaction beginTransaction = getSupportFragmentManager().beginTransaction();        for (int i = 0; i < fragment.size(); i++) {            Fragment f = this.fragment.get(i);            if (j == i) {                if (f.isAdded()) {                    beginTransaction.show(f);                } else {                    beginTransaction.add(R.id.fy, f);                }            } else {                if (f.isAdded()) {                    beginTransaction.hide(f);                }            }        }        beginTransaction.commit();    }

   首先来解释一下这个代码。也是和replace()方法的步骤一样,首先先是获得fragment的管理器。然后在循环里面的第一个fragment参数实际上是一个集合,就是往里面添加自己想要添加的fragment界面的。然后进入第一个判断,就是判断当前的fragment界面是不是和遍历的fragment界面是同一个界面。第二个判断是为空判断,判断这个fragment是不是已经被添加了的。如果是被添加了就展示这个fragment就行,如果没有被添加,就把这个添加到事务里面。当当前被选中的界面和遍历的界面不是同一个界面的时候,用事务把这个fragment界面给隐藏起来。

   通过上面的方法就能实现,当你看新闻的时候不小心其他按钮的时候,再次返回新闻还是刚刚你阅读的那个界面。

阅读全文
0 0
原创粉丝点击