DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 移动应用 > Android

AndroidFragment使用时出现java.lang.IllegalStateException:commitalreadycalled

1)说明:如上所说,commit不能被同一个FragmentTransaction调用多次,上面的代码正是违反了这条规定
将最后一句ft.commit();改为 下面的语句,就不会有异常了。
if (!commit) {
ft.commit();
commit = true;
}

2) 虽然不抛出异常,但是,fragment总是显示不出来
说明:用如下两种方式来解决:
(1) 利用FragmentTransaction 的add 和remove方式来实现,这样的话,每次都要重新调用FirstFragment的onCreateView函数
。代码改为:
   。。。。。。
 if (btn.getText()==getString(R.string.cancel))
{


ft = getFragmentManager().beginTransaction(); 
       /*为Fragment设置淡入淡出效果,Android开发网提示这里这两个动画资源是android内部资源无需我们手动定义。*/  
       ft.setCustomAnimations(android.R.animator.fade_in,  
               android.R.animator.fade_out);
       
       
       ft.add(fragment, "FragmentTest0000");
       ft.commit();
       
btn.setText(R.string.ok);
                t.setText("btn ok!");

}
else {
ft = getFragmentManager().beginTransaction(); 
       /*为Fragment设置淡入淡出效果,Android开发网提示这里这两个动画资源是android内部资源无需我们手动定义。*/  
       ft.setCustomAnimations(android.R.animator.fade_in,  
               android.R.animator.fade_out);
       ft.remove(fragment);
           ft.commit();
btn.setText(R.string.cancel);
                t.setText("btn cancel!");
}


(2) 不要把FragmentTransaction ft作为类的数据成员,而是作为本地变量来使用,代码如下:
            FragmentTransaction ft
 = getFragmentManager().beginTransaction(); 
       /*为Fragment设置淡入淡出效果,Android开发网提示这里这两个动画资源是android内部资源无需我们手动定义。*/  
       ft.setCustomAnimations(android.R.animator.fade_in,  
               android.R.animator.fade_out);

       
       if (fragment.isHidden()) {  
                ft.show(fragment);  
                t.setText("fragment show");
            } else {  
                ft.hide(fragment);  
                t.setText("fragment hidden");
            } 
       ft.commit();

if (btn.getText()==getString(R.string.cancel))
{


btn.setText(R.string.ok);
                t.setText("btn ok!");

}
else {

btn.setText(R.string.cancel);
                t.setText("btn cancel!");
}
注意: 这种方式和上一种方式的区别在于:
   每次点击button,都是重新创建FragmentTransaction的实例ft,用这个新的实例去操作已经有的fragment,通过hide和show方法。很明显,这种方式不会重新调用FirstFragment的onCreateView函数。

这对于Fragment的生命周期管理是非常重要的。

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号