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

优化点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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值