Android commit already called
来源:互联网 发布:unity3d模型制作 编辑:程序博客网 时间:2024/06/09 17:03
FragmentTransaction 这个对象只能调用一次,当我们通过按钮更换Fragment时,那我们应该怎么解决呢?
想到一种方法可以绕过这个,写一个changeTo()函数,就可以绕过这个了,直接上代码:
package com.example.endtwo;import android.app.Activity;import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.Toast;public class Bottom extends Fragment {private int currentId = 0;public void onAttach(Activity activity){super.onAttach(activity);}/**调用该方法来进行Fragment的初始化创建*/public void OnCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);}/**一旦Fragment已被创建,要创建它自己的用户界面时调用该方法*/@Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle saveInstanceState){View view = inflater.inflate(R.layout.bottom, container, false);Button pre = (Button) view.findViewById(R.id.button1); Button next = (Button) view.findViewById(R.id.button2); pre.setOnClickListener(new View.OnClickListener() { FragmentManager fm = getFragmentManager(); final FragmentTransaction ft = fm.beginTransaction();@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubchangeTo(0);}}); next.setOnClickListener(new View.OnClickListener() { FragmentManager fm = getFragmentManager(); final FragmentTransaction ft = fm.beginTransaction();@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubchangeTo(1);}}); return view;}public void changeTo(int id){FragmentManager fm = getFragmentManager(); final FragmentTransaction ft = fm.beginTransaction();if(id==0){//向前的按钮switch(currentId){case 0://Toast.makeText(arg0.getContext(), "on click pre2", Toast.LENGTH_LONG).show();ft.replace(R.id.fragment2, new Four());break;case 1://Toast.makeText(arg0.getContext(), "on click pre1", Toast.LENGTH_LONG).show();ft.replace(R.id.fragment2, new One());break;case 2://Toast.makeText(arg0.getContext(), "on click pre2", Toast.LENGTH_LONG).show();ft.replace(R.id.fragment2, new Two());break;case 3:ft.replace(R.id.fragment2, new Three());}currentId--;if(currentId<0){currentId+=4;}}else{switch(currentId){case 0://Toast.makeText(arg0.getContext(), "on click next1", Toast.LENGTH_LONG).show();ft.replace(R.id.fragment2, new Two());break;case 1://Toast.makeText(arg0.getContext(), "on click next2", Toast.LENGTH_LONG).show();ft.replace(R.id.fragment2, new Three());break;case 2:ft.replace(R.id.fragment2, new Four());break;case 3:ft.replace(R.id.fragment2, new One());}currentId++;currentId %= 4;}ft.commit();}/**一旦父Activity和Fragment的UI已经被创建,则调用该方法*/public void onActivityCreated(Bundle savedInstanceState){super.onActivityCreated(savedInstanceState);//完成Fragment的初始化---尤其是那些父Activity初始化完成后或则Fragment的View 被完全填充后才能做的事情}/**在可见生命周期的开始使用*/public void onStart(){super.onStart();}/**在活动生命周期的开始使用*/public void OnResume(){super.onResume();}/**在活动生命周期的结束时被调用*/public void onPause(){super.onPause();}/**在活动生命周期结束的时候,调用该方法保存Ui信息*/public void onSaveInstanceState(Bundle savedInstanceState){super.onSaveInstanceState(savedInstanceState);}public void onStop(){super.onStop();}public void onDestroyView(){super.onDestroyView();}/**在整个生命周期的结束时调用该方法*/public void onDestroy(){super.onDestroy();}/**当Frament从它的父对象上分割时,调用该方法*/public void onDetach(){super.onDetach();}}
0 0
- Android commit already called
- [Android]"commit already called"错误解决
- Android:java.lang.IllegalStateException: commit already called
- commit already called
- IllegalStateException: commit already called
- 异常处理commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- 【Fragment研究系列】Exception: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- java.lang.IllegalStateException: commit already called
- Fragment commit already called的错误
- 遇到java.lang.IllegalStateException: commit already called
- MyEclipse/Eclipse导入sun.misc.BASE64Encoder jar包步骤
- Spring注解@Component、@Repository、@Service、@Controller区别
- 文章标题 Oracle数据库中dual表使用
- Oracle substr()与substrb()
- 27. PHP 表达式
- Android commit already called
- C++ 文件操作
- socket咋谈
- 大小写转换-------蓝桥杯
- OC学习之道:C语言的冒泡排序与OC的冒泡排序之比较
- 堆排序
- 蓝桥杯 C本科B组 第39级台阶
- 独木舟上的旅行
- Servlet工作原理