关闭

对Fragment的封装和fragment的显示隐藏回退栈管理

243人阅读 评论(3) 收藏 举报

废话不多说,直接上代码



package test.bwie.jiyun.com.ins7566.ipandatv.widget.manger;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

import test.bwie.jiyun.com.ins7566.ipandatv.App;
import test.bwie.jiyun.com.ins7566.ipandatv.base.BaseFragment;

import static test.bwie.jiyun.com.ins7566.ipandatv.App.lastFragment;

/**
 * Created by suyun on 2017/7/28.
 */

public class FragmentBuilder {
    private FragmentManager fragmentManager;
    private BaseFragment baseFragment;
    private FragmentTransaction fragmentTransaction;
    private String simpleName;

    private FragmentBuilder() {
        init();
    }

    private static FragmentBuilder fragmentBuilder;

    public static synchronized FragmentBuilder getInstance() {
        if (fragmentBuilder == null) {
            fragmentBuilder = new FragmentBuilder();
        }
        return fragmentBuilder;
    }

    private void init() {
        //初始化并得到fragmentManger管理者对象
        fragmentManager = App.activity.getSupportFragmentManager();
    }

    public FragmentBuilder start(Class<? extends BaseFragment> baseclass, int ViewID) {
        //开始事务
        fragmentTransaction = fragmentManager.beginTransaction();
        //要跳转fragment的类
        simpleName = baseclass.getSimpleName();
        //tag标记
        baseFragment = (BaseFragment) fragmentManager.findFragmentByTag(simpleName);
        if (baseFragment == null) {
            try {
                baseFragment = baseclass.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            //添加到事务
            fragmentTransaction.add(ViewID, baseFragment, simpleName);
        }
        if (lastFragment != null) {
            fragmentTransaction.hide(lastFragment);
        }
        //展示当前页面
        fragmentTransaction.show(baseFragment);
        //添加到回退栈
        fragmentTransaction.addToBackStack(simpleName);
        return this;
    }

    //传参
    public FragmentBuilder setParms(Bundle bundle) {
        baseFragment.setParams(bundle);
        return this;
    }

    public BaseFragment builder() {
        //赋给上一个页面
        lastFragment = baseFragment;
        //提交事务
        fragmentTransaction.commit();
        return baseFragment;
    }

    //清空
    public static void clean() {
        fragmentBuilder = null;
    }


}

这个里面完全封装了fragment的跳转,切换,显示隐藏,回退栈管理

1
0
查看评论

Fragment回退栈管理

背景介绍 平板项目中使用Fragment做页面,而且还要用Fragment做次级页面的跳转,点击返回按钮,可以返回上一个页面。次级页面下钻层级不确定,但是界面相同,也就是说Fragment可以被复用 解决思路 使用回退栈管理 控制FragmentManager的show()和hide()方法来实...
  • u010385002
  • u010385002
  • 2016-08-04 17:08
  • 1617

fragmentManager中的回退栈

实现效果如图 下部tab标签,实现fragment页面切换。 遇到的问题: 通过FragmentTransaction的replace方法会导致,每次都会重新调用fragment的onCreateView()方法,浪费时间。 解决方法: 通过FragmentTransaction的h...
  • zglslyg
  • zglslyg
  • 2014-03-03 13:51
  • 22685

Android:Fragment返回栈的监听和弹栈 随记

添加返回栈的监听 OnBackStackChangedListener方法onBackStackChanged fragmentManager.addOnBackStackChangedListener(onBackStackChangedListener); Log.i(Tag, "...
  • linzhaoliangyan
  • linzhaoliangyan
  • 2015-12-18 23:43
  • 286

android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态

在android开发的布局中,国内大量的使用底部菜单,这个本来不符合android的规范,我个人是深恶痛绝的,但是产品是这样设计的,也只能是这样做了。在这篇博客中,我将结合网上的资料以及自己的使用经验来实现一个底部菜单,解决了很多网友提出的各种问题,在文章中,我只贴出部分的实现代码以及效果图,免得占...
  • lovexieyuan520
  • lovexieyuan520
  • 2016-01-27 16:30
  • 16841

Fragment的显示与隐藏问题

众所周知,Fragment是安卓发展过程中一个重要的变化,其使用也越来越普遍了。关于Fragment的使用,我们经常用到的就是在一个activity钟通过菜单选项的点击来切换不同的Fragment。同时一般我们都有这样的需求:保持Fragment的状态,也就是我们来回的切换Fragment时,对应的...
  • liulinghuidage
  • liulinghuidage
  • 2016-01-15 10:55
  • 915

对于activity与fragment回退栈的管理

在做项目时,UI界面采用activity管理fragment,其中涉及到fragment的回退栈管理 以及再按一次退出,一般在activity中 onBackPressed方法进行操作 @Override public void onBackPressed...
  • su_yun
  • su_yun
  • 2017-09-15 10:07
  • 150

Fragment隐藏、显示、替换

以下全是V4包下的类。
  • u011309801
  • u011309801
  • 2014-10-21 13:44
  • 8017

Fragment的隐藏与显示

一般fragment和activity一起用的时候有两种方法,一个是用fragment替换到activity里事先放置的站位布局FragmentTransaction fragmentTransaction = getFragmentTransaction(); fragmentTr...
  • dl10210950
  • dl10210950
  • 2017-02-06 08:37
  • 2764

Android Fragment隐藏显示调用的方法

//在Activity中加载显示隐藏Fragment import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.con...
  • haozidao
  • haozidao
  • 2016-05-06 11:22
  • 5770

Fragment的隐藏与显示

package com.bwie.helpdemo; import com.bwie.fragment.BillFrag; import com.bwie.fragment.IndexFrag; import com.bwie.fragment.TaskFrag; import an...
  • LM_ZP
  • LM_ZP
  • 2016-05-12 09:32
  • 4349
    个人资料
    • 访问:1200次
    • 积分:84
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    文章存档