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();}}


这样就可以多次更换Fragment了

0 0
原创粉丝点击