Android commit already called

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已被创建,要创建它自己的用户界面时调用该方法*/
	@Override
	public 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();
			@Override	
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				changeTo(0);
		}});
        next.setOnClickListener(new View.OnClickListener() {
        	FragmentManager fm = getFragmentManager();
    	    final FragmentTransaction ft = fm.beginTransaction();
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				changeTo(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了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值