先大概看一下项目结构

adaprter和base就不用说了,就是适配器和baseActivity之类的东西

callBack里是一些 监听和回调接口

属性 实体类

重点看一下FragmentUtil.class

package com.zzyd.utils;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * 构造器;
 * FragmentUtil();
 * onSaveInstanceState();
 */

public class FragmentUtil {

    private static final String CURRENT_FRAGMENT = "STATE_FRAGMENT_SHOW";

    private FragmentManager fragmentManager;

    private Fragment currentFragment = new Fragment();
    private List<Fragment> fragments = new ArrayList<>();

    /**
     * 当前fragment的下标
     */
    private int currentIndex = 0;

    /**
     * Fragment的载体view容器
     */
    private int containerViewId;

    public FragmentUtil(AppCompatActivity appCompatActivity, int containerViewId){
        this.fragmentManager = appCompatActivity.getSupportFragmentManager();
        this.containerViewId = containerViewId;
    }

    public void initFragment(Bundle savedInstanceState,InitFragmentCallBack initFragmentCallBack){
        if (savedInstanceState != null) {
            // “内存重启”时调用
            //获取“内存重启”时保存的索引下标
            currentIndex = savedInstanceState.getInt(CURRENT_FRAGMENT,0);
            fragments.removeAll(fragments);
            for(int i = 0 ; i < fragments.size() ; i ++){
                fragments.add(fragmentManager.findFragmentByTag(i+""));
            }
            //恢复fragment页面
            restoreFragment();
        }else{
            //正常启动时调用
            try {
                initFragmentCallBack.initFragment(fragments);
            }catch (NullPointerException e){
                Log.e("","FragmentUtil:initFragmentCallBack == null");
            }
            showFragment();
        }
    }

    public void onSaveInstanceState(Bundle outState){
        //“内存重启”时保存当前的fragment名字
        outState.putInt(CURRENT_FRAGMENT,currentIndex);
    }

    /**
     * 使用show() hide()切换页面
     * 显示fragment
     */
    public void showFragment(){
        if(containerViewId == 0){
            Log.e("","containerViewId == null");
            return;
        }
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        //如果之前没有添加过
        if(!fragments.get(currentIndex).isAdded()){
            transaction.hide(currentFragment).add(containerViewId,fragments.get(currentIndex),""+currentIndex);  //第三个参数为添加当前的fragment时绑定一个tag
        }else{
            transaction.hide(currentFragment).show(fragments.get(currentIndex));
        }
        currentFragment = fragments.get(currentIndex);
        transaction.commit();
        transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);//标准动画
    }

    /**
     * 恢复fragment
     */
    public void restoreFragment(){
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        for (int i = 0; i < fragments.size(); i++) {
            if(i == currentIndex){
                transaction.show(fragments.get(i));
            }else{
                transaction.hide(fragments.get(i));
            }
        }
        transaction.commit();
        //把当前显示的fragment记录下来
        currentFragment = fragments.get(currentIndex);
    }

    /**
     * 切换Fragment
     * @param currentIndex
     */
    public void selectFragment(int currentIndex){
        this.currentIndex = currentIndex;
        showFragment();
    }

    public boolean isShowing(int index){
        if(index == this.currentIndex){
            return true;//当前Fragment处于显示状态
        }else{
            return false;
        }
    }

    public int getCurrentIndex(){
        return currentIndex;
    }

    public List<Fragment> getFragments(){
        return fragments;
    }

    public interface InitFragmentCallBack {
        void initFragment(List<Fragment> fragments);
    }

}

高仿APP——元贝驾考(一)FragmentUtils相关推荐

  1. 高仿APP——元贝驾考

    最近也是闲的没什么事情,所以准备做一系列专门高仿优秀APP 忙活了15天左右,拿出成品先欣赏一下吧! 这是欢迎页,用了一个API,大概有510张图片,每次随机访问加载一张,是不是很好玩呢 这是APP的 ...

  2. 高仿APP——元贝驾考(三)ListView多ItemView

    先预览一下效果 图中 图3.图4 是一个item,因为图片太长,屏幕显示放不下 从上面几张图片可以看得出来,大致分为2种情况:单张图和多张图(单张图是imageView宽高包裹,多张图时imageVi ...

  3. 高仿APP——元贝驾考(三)滑动关闭Activity

    项目中用到的滑动关闭页面,是基于SlidingMenu做的 下面贴出源码,并且讲解以下 /** * 向右滑动关闭Activity * * 添加关闭动画 */ public class SwipeBac ...

  4. 驾考一点通维语版_驾考宝典维语版APP下载-驾考宝典维语版正式版下载[安卓版]-华军软件园...

    驾考宝典维语版正式版 驾考宝典维语版正式版是款专为维吾尔族的用户们使用的驾照考试学习工具.驾考宝典维语版APP中有丰富的驾考知识点,用户可以在线学习理论知识和查看学车视频,可以在线做题和进行模拟测试. ...

  5. 元贝驾考2014科目一 v1.6.2 官方版

    元贝驾考2014科目一 v1.6.2 官方版 软件大小:4.05MB 软件语言:简体中文 软件性质:常用软件 软件授权:绿色版 更新时间:2014-05-21 应用平台:/Win8/Win7/WinX ...

  6. Android 高仿App项目归纳整理,持续更新中…

    Android 高仿App项目归纳整理,持续更新中- Android高仿App项目整理,包含高仿了一些大公司的app,有基于Java,Kotlin,Flutter等语言的.对于开发我们自已的项目时可以 ...

  7. 盘点 Github 上的高仿 app 项目

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:水哥:来源:GitHubClub 学技术的,多多少少 ...

  8. 盘点 Github 上的高仿 app 项目,B站 微博 微信等等

    学技术的,多多少少都仿过出名的产品. 一来,可以练练手,二来对知识点能查漏补缺.欢迎关注Java项目分享 更重要的一点是能给你带来及时的正反馈,让学习的过程不那么枯燥. 今天给大家介绍 GIthub ...

  9. 分享iOS开发常用(三方类库,工具,高仿APP,实用网站)

    一 . JSONModel  (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...

最新文章

  1. 团队作业4——第一次项目冲刺(Alpha版本)4.28
  2. MySQL Workbench的使用教程 (初级入门版)
  3. Logistic回归与梯度上升算法
  4. 贪心算法——合并区间(Leetcode 56)
  5. Linux思维导图及命令速查表8张
  6. mysql 删除创建表分区,MySQL分区表创建,分区创建、删除示例
  7. 如何生成随机验证码图片
  8. 在线作图|2分钟在线绘制三维PCOA图
  9. php中eregi,PHP 函数 eregi()
  10. 【第一组】第四次冲刺例会纪要
  11. Cisco Packet Tracer vty的两种接口
  12. 史上最全的信息收集总结!!!
  13. Git 技术篇 - github镜像推荐,无需翻墙实现飞速访问github官网
  14. iOS 警告 Local declaration of 'XXX' hides instance
  15. linux usb drivers开发
  16. matlab拟合伽玛曲线,HDR详解 - 伽玛曲线
  17. Android8.1 MTK平台 修改蓝牙默认名称
  18. 数学分析教程史济怀练习16.3
  19. 罗克韦尔定时器的一些应用
  20. inodemac_Inode7.0 for mac

热门文章

  1. 必读 | 深入理解 Flutter 的布局约束
  2. python面向对象和面向过程介绍与区别
  3. ps安装了可以打开但开始里面找不到_工具篇丨蓝湖切图使用方法—PS
  4. 现代密码学实验五:签名算法
  5. CentOS7安装RocketMQ
  6. OSX:不同OSX版本号的标记可能不兼容
  7. 成品APP直播源码Android-Listview纯汉字无图标
  8. Switch基本配置
  9. minipcie接口CAN卡解决工控机扩展CAN通道的难题 minipcie CAN
  10. 一体化污水处理设备的三种污水处理工艺详解