FragmenManager

interface

BackStackEntry

  • 实现类: BackStackRecord
public interface BackStackEntry{

    public int getId();

    public String getName();

    @StringRes
    public int getBreadCrumbTitleRes();

    @StringRes
    public int getBreadCrumbShortTitleRes();

    public CharSequence getBreadCrumbTitle();

    public CharSequence getBreadCrumbShortTitle();

}

OnBackStackChangedListener

//监听堆栈变化的接口
public interface OnBackStackChangedListener{
    //当Fragment堆栈变化时被调用
    public void onBackStackChanged();
}

filed

POP_BACK_STACK_INCLUSIVE

//针对popBackStack(String,int)和popBackStack(int,int)设置的标识符。
//如果在调用这两个方法时设置了这个标记,
//并且提供了回退堆栈(back stack)中的实体名称或Id,
//那么堆栈中所有匹配的项目实体都会被消耗掉,直到没有匹配的或到达栈底。
public static final int POP_BACK_STACK_INCLUSIVE = 1<<0;

Abstract method

beginTransaction

/**
  *Start a series of edit operations on the Fragments associated with
  * this FragmentManager.
  */
public abstract FragmentTransaction beginTransaction();

在当前FragmentManager内开始一系列对其内部fragment的操作

注意: 一次实务操作(fragment transaction)只能在Activity保存它的状态之前被createdcommited.如果试图在FragmentActivitonSaveInstanceState方法调用之后调用,你将会受到一个错误异常。这是因为framework负责保存你当前的fragment状态,如果你在状态保存之后进行改变,这样改变的结果状也会态丢失。

executePendingTransactions

/**
     * After a {@link FragmentTransaction} is committed with
     * {@link FragmentTransaction#commit FragmentTransaction.commit()}, it
     * is scheduled to be executed asynchronously on the process's main thread.
     * If you want to immediately executing any such pending operations, you
     * can call this function (only from the main thread) to do so.  Note that
     * all callbacks and other related behavior will be done from within this
     * call, so be careful about where this is called from.
     *
     * @return Returns true if there were any pending transactions to be
     * executed.
     */
public abstract boolean executePendingTransactions();

FragmentTransaction已经被commited(调用fragmentManager.commit()),该事务将被安排在进程的主线程(main thread)异步执行。如果你想立即执行这样的等待操作,你可以调用此方法(在主线程内)。 注意: 所有的回调(callback)和相关的联系的反应行为(behavior)均在这个回调函数中,所以使用时要注意在哪里调用。

findFragmentById和findFragmentByTag

//根据从xml文件中inflated的Id或者在添加到事务中的容器Id来查找fragment。
public abstract Fragment findFragmentById(@IdRes int id);

//根据xml中的tag或者添加到transaction中的tag来查找fragment
public abstract Fragment findFragmentByTag(String tag);

这两个方法均首先从当前fragmentManager关联的activity中查找。没有的话,从当前back stack中的所有fragments中查找。

popBackStack相关

/**把顶部的状态弹出回退堆栈。这个方法是异步执行的。
  *它会按照请求的顺序来执行弹出操作,
  *但是这个操作直到应用程序把控制权返回给事件循环之后,才能够执行这个操作
  */
public abstract void popBackStack();

    /**
     * 与popBackStack()方法类似,
     * 但是在这个调用的内部,会立即执行弹出操作。
     * 就像调用executePendingTransactions()方法之后的效果一样。
     */
public abstract boolean popBackStackImmediate();

/**
     * 从管理器的Fragment回退堆栈中把最后放入的由name参数所指定的Fragment对象弹出。
     * 这个函数是异步的,它会按照请求的顺序来执行弹出操作,
     * 但是直到应用程序把控制权返回给事件循环之后,才会执行这个操作。
     *
     * @param name    如果这个参数是非空的,那么就要在回退堆栈中查找
     *          这个名称所指向的Fragment对象。
     *             如果找到,那么这个状态之上的所有状态都会被弹出。
     *             POP_BACK_STACK_INCLUSIVE标记能够用于控制命名状态
     *          本身是否要被弹出。如果这个参数是null,
     *          则只有顶部状态会被弹出。
     * @param flags 0或POP_BACK_STACK_INCLUSIVE
     */
public abstract void popBackStack(String name, int flags);

/**
     * 与popBackStack(int, int)方法类似,
     * 但是在这个调用的内部,会立即执行弹出操作。
     * 就像调用executePendingTransactions()方法之后的效果一样。
     */
public abstract boolean popBackStackImmediate(String name, int flags);
/**
     * 把给定ID标识所指定的状态之上的所有状态都弹出回退堆栈。
     * 这个方法是异步,它会按照请求的顺序来执行弹出操作。
     * 但是直到应用程序把控制权返回个事件循环之后才会执行这个操作。
     * @param id 这个参数设定了要弹出的状态的标识。
     *      如果被标识的状态不存在,则什么也不做。
     *         POP_BACK_STACK_INCLUSIVE标记能够用
     *      于控制id所标识的状态本身是否会被弹出堆栈。
     * @param flags 0或POP_BACK_STACK_INCLUSIVE
     */
public abstract void popBackStack(int id, int flags);
/**
     * 与popBackStack(int, int)方法类似,但是在这个调用的内部,会立即执行弹出操作。
     * 就像调用executePendingTransactions()方法之后的效果一样。
     * @return 如果弹出了某些状态的fragment,则返回true,否则返回false。
     */
public abstract boolean popBackStackImmediate(int id, int flags);

getBackStackEntryCount

//返回回退堆栈中当前实体对象的数量。
public abstract int getBackStackEntryCount();

//这个方法返回回退堆栈中由index索引所标识的BackStackEntry对象,
//索引0指向堆栈底部的实体对象。
public abstract BackStackEntry getBackStackEntryAt(int index);

BackStackChangedListener

//给Fragment的back stack添加监听
public abstract void addOnBackStackChangedListener(OnBackStackChangedListener listener);

//移除当前Fragment的back stack监听
public abstract void removeOnBackStackChangedListener(OnBackStackChangedListener listener);

getFragment、putFragment

/**
     * 把一个指定的Fragment对象放入一个Bundle对象中。
     * 这个Bundle对象能够作为持久的状态来保存,
     * 并且在后续的调用getFragment(Bundle, String)方法来恢复的时候,
     * 它会返回一个与当前实例相同的Fragment对象。
     * @param bundle 这个参数指定了一个Bundle对象,方法执行时,会把指定的Fragment对象引用放到这个Bundle对象中。
     * @param key 这参数指定在Bundle对象中这个实体的名称。
     * @param fragment 这个参数指定要保存的Fragment对象的引用。
     */
public abstract void putFragment(Bundle bundle, String key, Fragment fragment);

//返回最近一次用putFragment(Bundle, String, Fragment)方法放置的Fragment对象实例。
public abstract Fragment getFragment(Bundle bundle, String key);

//返回被添加到FragmentManager中的所有Fragment列表
public abstract List<Fragment> getFragments();

saveFragmentInstanceState

/**
     * 保存给定的Fragment对象的当前状态。
     * 在创建一个新的Fragment对象实例,并且把它添加到Fragment管理器中之后,
     * 能够使用这个方法来创建一个跟Fragment对象的当前状态匹配的状态对象。
     * 使用这个方法时要注意以下限制:
     *             1、Fragment对象必须跟当前的FragmentManager对象绑定;
     *             2、使用这个被保存的状态来创建一个新的Fragment对象,
     *            必须与创建这个状态的Fragment对象有相同的类类型。
     *             3、 被保存的状态不能包含对其他的Fragment对象依赖,
     *             也就是说,不能使用putFragment(Bundle, String, Fragment)方法来保存一个Fragment对象的引用,
     *          因为这个引用这个引用在后续使用时可能是无效的。
     *          同样Fragment对象的目标和结果代码也不能包含在这个要保存的状态中。
     *
     * @param fragment 要保存状态的Fragment对象。
     * @@return 生成的状态对象,如果没有感兴趣的由Fragment所创建的状态,那么这个方法会返回null。
     */
public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f);
`

isDestroyed

//如果当前FragmentManager依赖的Activity是否destroy。
//是的话返回true。so this instance is now dead.
public abstract boolean isDestroyed();
```
####dump
```java
/**
         * 把FragmentManager的状态打印输出到给定的流中。
         * @param prefix--->在每行文本的前面要打印输出的文本。
         * @param fd--->要输出的转存文件的描述。
         * @param writer--->给转存操作设置的一个PrintWriter对象。
         * @param args--->给转存请求提供一组额外的参数。
         */
public abstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args);
```

####enableDebugLogging
```java
//控制是否打开框架内Fragment管理器的调试日志(log)。
//如果开启调试日志,那么就会在Logcat中看到框架执行Fragment操作的日志信息。
public static void enableDebugLogging(boolean enabled)

results matching ""

    No results matching ""