【安卓】采用静态工厂方法的Fragment实现ViewPager+Fragment

来源:互联网 发布:交换机端口标签 编辑:程序博客网 时间:2024/05/01 23:29

优化点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

0 0
原创粉丝点击