Fragment报Fragment already active问题解决

Fragment already active错误出现的原因:当点击切换fragment时,由于上一个fragment1还没有结束(隐藏),下一个fragment2还没有开始就使用setArguments开始由activity向fragment2传递数据,因而就会产生Fragment already active的错误。

网上搜寻了好多办法,但大部分博客都是千篇一律扒的这个: https://blog.csdn.net/u011730649/article/details/43227721  说什么可以使用setter和getter Fragment的属性方法进行数据的存储和获取。而且没有给出任何的解决代码。我想知道,在说使用setter和getter Fragment的属性方法进行数据的存储和获取可以解决Fragment already active问题的人,你们真的亲身测试过解决这个问题么?而且假设使用这个办法好用,那么官网给出的“activity与fragment数据传递推荐使用setArguments进行传值“这句话是摆设呀。

下面我来说一下我在实际中的解决办法:

正常切换fragment的流程是:

Fragment1 fragment1=new Fragment1();
Fragment2 fragment2=new Fragment2();

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();// 创建一个事务
  /*
   * 隐藏所有的Fragment(即结束fragment1)
   */
 if (fragment1 != null) {
     transaction.hide(fragment1);
     }
 if (fragment2 != null) {
      ransaction.hide(fragment2);
    }
 /*
  *显示fragment2
  */
transaction.show(fragment2);
transaction.commit();// 提交事务

如上述代码所述:我们可以在第一个fragment(fragment1)被隐藏后,第二个fragment(fragment2)显示以后使用setArguments由activity向fragment2传递数据。具体代码如下:

Fragment1 fragment1=new Fragment1();
Fragment2 fragment2=new Fragment2();

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();// 创建一个事务
  /*
   * 隐藏所有的Fragment(即结束fragment1)
   */
 if (fragment1 != null) {
     transaction.hide(fragment1);
     }
 if (fragment2 != null) {
      ransaction.hide(fragment2);
    }
 /*
  *显示fragment2
  */
transaction.show(fragment2);
 if(fragment2!=null) {
    Bundle bundle = new Bundle();
    bundle.putString("你要传值的key", 你要传的值);
    fragment2.setArguments(bundle);
  }
transaction.commit();// 提交事务

这样Fragment already active的问题就妥妥的解决了。

猜你喜欢

转载自www.cnblogs.com/1925yiyi/p/8971027.html