优化点1 .用一个transaction 的replace函数,这样每次切换都会把上一次的fragment回收了,就不存在内存问题
实现方案有
第一种:用一个Fragment类的实例 维护当前正在显示的Fragment,每次切换都适合把正在显示对Fragment赋值,然后在点击的时候就可以使用关键字 “instance of”判断mCurrent属于哪一个Fragment,然后调用相应的方法。 第二种:写一个抽象的类继承Fragment,包括一个处理点击事件的抽象想法,所有Fragment继承这个父类并实现抽象方法,然后再 使用的时候用一个Fragment类的实例 维护当前正在显示的Fragment,每次切换都适合把正在显示对Fragment赋值给mCurrent,然后在点击的时候直接调用mCurrent的处理点击事件的方法就行了。
现在我采用第二种:
优化点2 :点击时需要实例化Fragment, 那么每个Fragment 可以这样子优化,采用静态工厂方法实现Fragement 的实例化
优化点 3 第二种方法中通过 Fragment 传值来判断当前的对象是否是之前的那一个,那么或许咱们可以通过传递String 对象来判断即可
实现的思路为
/** 仿 众筹app**/@Bind(R.id.linelayout_main)LinearLayout linelayout_main; @Bind(R.id.linelayout_active)LinearLayout linelayout_active; @Bind(R.id.linelayout_message)LinearLayout linelayout_message; @Bind(R.id.linelayout_mine)LinearLayout linelayout_mine; private MainPageFragment mMainFragment; private DynamicFragment mDynamicFragment; private MessageFragment mMessageFragment; private MineFragment mMineFragment; private FrameLayout mframelayout; private String mTempFragmentTAG="";//标志当前的栏目 setContentView(R.layout.activity_main); ButterKnife.bind(this); mframelayout=(FrameLayout)findViewById(R.id.fragment_content); private void SwitchFragment(Fragment mfragment,String currentTAG){ if(!currentTAG.equals(mTempFragmentTAG)){//当点击的fragment 不是当前点击的则新建,是则跳过 FragmentManager mfragmentmanager = getSupportFragmentManager(); FragmentTransaction mfragmentTransaction = mfragmentmanager.beginTransaction(); if(!mfragment.isAdded()){ //mfragmentTransaction.addToBackStack(null); BackStack 栈 mfragmentTransaction.replace(R.id.fragment_content, mfragment,currentTAG).commit(); }else{ mfragmentTransaction.show(mfragment); } mTempFragmentTAG=currentTAG; } } private void setSelect(int i) { if(i==0){//菜单中的首页栏目 mMainFragment= MainPageFragment.newInstance(); SwitchFragment(mMainFragment,"MAIN"); }else if(i==1){//菜单中的关注栏目 mDynamicFragment=DynamicFragment.newInstance(); SwitchFragment(mDynamicFragment,"DYNAMIC"); }else if(i==3){//菜单中的消息栏目 mMessageFragment=MessageFragment.newInstance(); SwitchFragment(mMessageFragment,"MESSAGE"); }else{//菜单中的我的栏目 mMineFragment=MineFragment.newInstance(); SwitchFragment(mMineFragment,"MINE"); } } /** * 静态工厂方法 * @return */public class MainPageFragment extends Fragment { private static MainPageFragment mMainPageFragment=null; public static MainPageFragment newInstance() { mMainPageFragment=new MainPageFragment(); return mMainPageFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //todoSomething }}关于此个优化,我的相关博文请看 http://blog.csdn.net/qq_14997169/article/details/52728410