【安卓】采用静态工厂方法的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
- 【安卓】采用静态工厂方法的Fragment实现ViewPager+Fragment
- ViewPager中添加Fragment的方法实现
- 安卓静态Fragment与动态Fragment的理解
- 安卓开发:使用ViewPager+Fragment实现选项卡
- Android-Viewpager+fragment的实现
- fragment实例化方法(用静态工厂)
- Fragment传参:使用静态工厂方法来创建Fragment的实例
- 【安卓笔记】ViewPager+Fragment布局中的Fragment数据更新
- android,安卓,TabLayout + ViewPager + Fragment
- 安卓布局 viewpager+tablelayout+fragment
- 安卓--第七天--fragment的实现
- Android采用Fragment+ViewPager+动画实现页面滑动
- 实现广告条,采用ViewPager里嵌套fragment
- ViewPager+Fragment实现TabHost
- Android实现ViewPager+Fragment
- TabLayout 实现ViewPager+fragment
- ViewPager+Fragment实现
- Fragment+ViewPager 实现仿微信
- 【Widows】Nginx+tomcat集群环境搭建
- ffmpeg中的时间单位
- leetcode11. Container With Most Water两根柱子围成最大面积
- 学好Spring系列之理解AOP
- 新版本的SqlServer分布存储过程
- 【安卓】采用静态工厂方法的Fragment实现ViewPager+Fragment
- Ubuntu16.04 gedit 中文乱码
- iOS版本《六爻八卦算命》
- 激活IntelliJ插件Jrebel Social并配置热部署
- 初识JAVA
- hdu 5050 矩阵快速幂
- Makefile依赖关系中的竖线“|”
- 关于reactjs
- Codeforces Round #367 (Div. 2) E. Working routine (十字链表)