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