Fragment中相关类的介绍
2014-11-16 11:58
204 查看
FragmentManage:
FragmentManager能够实现管理activity中fragment. 通过调用activity的getFragmentManager()取得它的实例.
FragmentManager可以做如下一些事情:
1、使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag()
(适用于有或没有UI的fragment)获取activity中存在的fragment
2、将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).
3、使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.
这个类提供了与Activity内部的Fragment对象进行交互的接口。
嵌套(内部)类
interface FragmentManager.BackStackEntry
代表了Fragment回退堆栈的一个项目实体,调用FragmentTransaction.addToBackStack()方法时会创建这个项目实体。
interface FragmentManager.OnBackStackChangedListener
观察回退堆栈变化的接口
从 FragmentManager 获得一个FragmentTransaction的实例 :
每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().
public abstract FragmentTransaction beginTransaction()
启动一个跟FragmentManager关联的一系列的与Fragment对象相关的编辑操作。
注意:一个Fragment事务只能在Activity保存其状态期间被创建/被提交。如果在Activity.onSaveInstanceState()方法调用之后,提交事务则会发生错误。这是因为系统框架需要保存当前Fragment对象的状态,并且如果在状态保存之后来改变Fragment,那么改变的结果也会丢失。
public abstract boolean executePendingTransactions()
在用FragmentTransaction.commit()方法提交FragmentTransaction对象后,会在进程的主线程中,用异步的方式来执行。如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。
返回值:如果等待中的事务被执行,那么就会返回true。
public abstract Fragment findFragmentById(int id)
这个方法用于查找由给定的id所标识的那个Fragment对象。这个id既可以是源自布局填充时的XML,也可以是添加事务时的容器ID。这个方法首先会搜索被添加到当前管理的Activity中的Fragment对象,如果没有找到,它会搜索当前回退堆栈中所有的Fragment对象,以便找到跟这个ID匹配的Fragment对象。
返回值:如果找到,则返回一个Fragment对象,否则返回null。
public abstract Fragment findFragmentByTag(String tag)
这个方法用于查找由给定的标签所标识的一个Fragment对象,这个标签既可以源自布局填充时XML,也可以是在添加事务时所提供的。这个方法首先会搜索被添加到当前管理的Activity中的Fragment对象,如果没有找到,它会搜索当前回退堆栈中所有的Fragment对象,以便找到跟这个标签匹配的Fragment对象。
返回值:如果找到,则返回一个Fragment对象,否则返回null。
public abstract Fragment getFragment(Bundle bundle, String key)
返回最近一次用putFragment(Bundle, String, Fragment)方法放置的Fragment对象实例。
参数:
bundle--->制指定要从哪个Bundle对象中获取Fragment引用。
key--->指定Bundle对象中实体对象的名称。
返回值:返回跟给定引用关联的当前Fragment对象实例。
public abstract void popBackStack()
把顶部的状态弹出回退堆栈。这个方法是异步执行的。它会按照请求的顺序来执行弹出操作,但是这个操作直到应用程序把控制权返回给事件循环之后,才能够执行这个操作。
public abstract void popBackStack(String name, int flags)
从管理器的Fragment回退堆栈中把最后放入的由name参数所指定的Fragment对象弹出。这个函数是异步的,它会按照请求的顺序来执行弹出操作,但是直到应用程序把控制权返回给事件循环之后,才会执行这个操作。
参数:
name--->如果这个参数是非空的,那么就要在回退堆栈中查找这个名称所指向的Fragment对象。如果找到,那么这个状态之上的所有状态都会被弹出。POP_BACK_STACK_INCLUSIVE标记能够用于控制命名状态本身是否要被弹出。如果这个参数是null,则只有顶部状态会被弹出。
flags--->既可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract void popBackStack(int id, int flags)
把给定ID标识所指定的状态之上的所有状态都弹出回退堆栈。这个方法是异步,它会按照请求的顺序来执行弹出操作。但是直到应用程序把控制权返回个事件循环之后才会执行这个操作。
参数:
id--->这个参数设定了要弹出的状态的标识。如果被标识的状态不存在,则什么也不做。POP_BACK_STACK_INCLUSIVE标记能够用于控制id所标识的状态本身是否会被弹出堆栈。
flags--->即可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract void putFragment(Bundle bundle, String key, Fragment fragment)
把一个指定的Fragment对象放入一个Bundle对象中。这个Bundle对象能够作为持久的状态来保存,并且在后续的调用getFragment(Bundle, String)方法来恢复的时候,它会返回一个与当前实例相同的Fragment对象。
参数:
bundle--->这个参数指定了一个Bundle对象,方法执行时,会把指定的Fragment对象引用放到这个Bundle对象中。
key--->这参数指定在Bundle对象中这个实体的名称。
fragment--->这个参数指定要保存的Fragment对象的引用。
public abstract void removeOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener)
删除之前用addOnBackStackChangedListener(OnBackStackChangedListener)方法添加的一个监听器。
public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f)
保存给定的Fragment对象的当前状态。在创建一个新的Fragment对象实例,并且把它添加到Fragment管理器中之后,能够使用这个方法来创建一个跟Fragment对象的当前状态匹配的状态对象。使用这个方法时要注意以下限制:
1. Fragment对象必须跟当前的FragmentManager对象绑定;
2. 使用这个被保存的状态来创建一个新的Fragment对象,必须与创建这个状态的Fragment对象有相同的类类型。
3. 被保存的状态不能包含对其他的Fragment对象依赖,也就是说,不能使用putFragment(Bundle, String, Fragment)方法来保存一个Fragment对象的引用,因为这个引用这个引用在后续使用时可能是无效的。同样Fragment对象的目标和结果代码也不能包含在这个要保存的状态中。
参数:
f--->要保存状态的Fragment对象。
返回值:
生成的状态对象,如果没有感兴趣的由Fragment所创建的状态,那么这个方法会返回null。
eg
实现 activiy和Fragment的交互切换。
activity中的一个布局区域
<FrameLayout
android:id="@+id/framelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/ll" >
</FrameLayout>
fragment
public class GameFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 获得被绑定到那个Activity的实例
Activity activity = getActivity();
TextView tv = new TextView(activity);
tv.setText("娱乐大爆炸: 王全安xx被抓了...");
tv.setTextSize(25);
tv.setTextColor(Color.GREEN);
return tv;
}
}
实现切换
private FragmentManager fm;
fm = getFragmentManager();
切换 我们需要借助FragmentManager
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.framelayout, new NewsFragment());
ft.commit();
就是将activity的一部分区域替换为fragment 我们在Fragment中直接创建一个view对象。
注意 我们在另外一个Fragment中对一个Fragment页面进行调整的时候 我们可以先获得这个fragment 进而实现我们相关的操作。
FragmentManager fragmentManager = getFragmentManager();
ContentFragment contentFragment = (ContentFragment) fragmentManager.findFragmentById(R.id.content_fragment);
// 调用正文Fragment类中的方法设置类型和图片
contentFragment.setTitle(type);
contentFragment.setImageID(imageID);
Fragment的生命周期
- onAttach 绑定到activity
- onCreate 创建fragment
- onCreateView 创建fragment的布局
- onActivityCreated activity创建完成后
- onStart 可见, 不可交互
- onResume 可见, 可交互.
- onPause 部分可见, 不可交互
- onStop 不可见
- onDestroyView 销毁fragment的view对象
- onDestroy fragment销毁了
- onDetach 从activity解绑了.
- Fragment向下兼容
- 把所有Fragment和FragmentManager改成support-v4包下的类.
- 把Activity的继承改为FragmentActivity(support-v4包下的)
#总结 1、; 每个fragment都对应一个xml文件 他的xml文件的书写类似
#于我们main的xml文件 。同时每个fragment有都对应一个 fragment程#序。 将每个fragment作为组建在main的xml文件中住组合使用。
#注意版本号要调整。
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
add(int
containerViewId,
Fragment fragment)
这个地方就是 当我们的布局中还没有Fragment的时候 我们借助这个add方法来实现我们的向布局中添加展示的Fragment
FragmentManager能够实现管理activity中fragment. 通过调用activity的getFragmentManager()取得它的实例.
FragmentManager可以做如下一些事情:
1、使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag()
(适用于有或没有UI的fragment)获取activity中存在的fragment
2、将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).
3、使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.
这个类提供了与Activity内部的Fragment对象进行交互的接口。
嵌套(内部)类
interface FragmentManager.BackStackEntry
代表了Fragment回退堆栈的一个项目实体,调用FragmentTransaction.addToBackStack()方法时会创建这个项目实体。
interface FragmentManager.OnBackStackChangedListener
观察回退堆栈变化的接口
FragmentTransaction:
FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作。从 FragmentManager 获得一个FragmentTransaction的实例 :
FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().
public abstract FragmentTransaction beginTransaction()
启动一个跟FragmentManager关联的一系列的与Fragment对象相关的编辑操作。
注意:一个Fragment事务只能在Activity保存其状态期间被创建/被提交。如果在Activity.onSaveInstanceState()方法调用之后,提交事务则会发生错误。这是因为系统框架需要保存当前Fragment对象的状态,并且如果在状态保存之后来改变Fragment,那么改变的结果也会丢失。
public abstract boolean executePendingTransactions()
在用FragmentTransaction.commit()方法提交FragmentTransaction对象后,会在进程的主线程中,用异步的方式来执行。如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。
返回值:如果等待中的事务被执行,那么就会返回true。
public abstract Fragment findFragmentById(int id)
这个方法用于查找由给定的id所标识的那个Fragment对象。这个id既可以是源自布局填充时的XML,也可以是添加事务时的容器ID。这个方法首先会搜索被添加到当前管理的Activity中的Fragment对象,如果没有找到,它会搜索当前回退堆栈中所有的Fragment对象,以便找到跟这个ID匹配的Fragment对象。
返回值:如果找到,则返回一个Fragment对象,否则返回null。
public abstract Fragment findFragmentByTag(String tag)
这个方法用于查找由给定的标签所标识的一个Fragment对象,这个标签既可以源自布局填充时XML,也可以是在添加事务时所提供的。这个方法首先会搜索被添加到当前管理的Activity中的Fragment对象,如果没有找到,它会搜索当前回退堆栈中所有的Fragment对象,以便找到跟这个标签匹配的Fragment对象。
返回值:如果找到,则返回一个Fragment对象,否则返回null。
public abstract Fragment getFragment(Bundle bundle, String key)
返回最近一次用putFragment(Bundle, String, Fragment)方法放置的Fragment对象实例。
参数:
bundle--->制指定要从哪个Bundle对象中获取Fragment引用。
key--->指定Bundle对象中实体对象的名称。
返回值:返回跟给定引用关联的当前Fragment对象实例。
public abstract void popBackStack()
把顶部的状态弹出回退堆栈。这个方法是异步执行的。它会按照请求的顺序来执行弹出操作,但是这个操作直到应用程序把控制权返回给事件循环之后,才能够执行这个操作。
public abstract void popBackStack(String name, int flags)
从管理器的Fragment回退堆栈中把最后放入的由name参数所指定的Fragment对象弹出。这个函数是异步的,它会按照请求的顺序来执行弹出操作,但是直到应用程序把控制权返回给事件循环之后,才会执行这个操作。
参数:
name--->如果这个参数是非空的,那么就要在回退堆栈中查找这个名称所指向的Fragment对象。如果找到,那么这个状态之上的所有状态都会被弹出。POP_BACK_STACK_INCLUSIVE标记能够用于控制命名状态本身是否要被弹出。如果这个参数是null,则只有顶部状态会被弹出。
flags--->既可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract void popBackStack(int id, int flags)
把给定ID标识所指定的状态之上的所有状态都弹出回退堆栈。这个方法是异步,它会按照请求的顺序来执行弹出操作。但是直到应用程序把控制权返回个事件循环之后才会执行这个操作。
参数:
id--->这个参数设定了要弹出的状态的标识。如果被标识的状态不存在,则什么也不做。POP_BACK_STACK_INCLUSIVE标记能够用于控制id所标识的状态本身是否会被弹出堆栈。
flags--->即可以是0,也可以是POP_BACK_STACK_INCLUSIVE。
public abstract void putFragment(Bundle bundle, String key, Fragment fragment)
把一个指定的Fragment对象放入一个Bundle对象中。这个Bundle对象能够作为持久的状态来保存,并且在后续的调用getFragment(Bundle, String)方法来恢复的时候,它会返回一个与当前实例相同的Fragment对象。
参数:
bundle--->这个参数指定了一个Bundle对象,方法执行时,会把指定的Fragment对象引用放到这个Bundle对象中。
key--->这参数指定在Bundle对象中这个实体的名称。
fragment--->这个参数指定要保存的Fragment对象的引用。
public abstract void removeOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener)
删除之前用addOnBackStackChangedListener(OnBackStackChangedListener)方法添加的一个监听器。
public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f)
保存给定的Fragment对象的当前状态。在创建一个新的Fragment对象实例,并且把它添加到Fragment管理器中之后,能够使用这个方法来创建一个跟Fragment对象的当前状态匹配的状态对象。使用这个方法时要注意以下限制:
1. Fragment对象必须跟当前的FragmentManager对象绑定;
2. 使用这个被保存的状态来创建一个新的Fragment对象,必须与创建这个状态的Fragment对象有相同的类类型。
3. 被保存的状态不能包含对其他的Fragment对象依赖,也就是说,不能使用putFragment(Bundle, String, Fragment)方法来保存一个Fragment对象的引用,因为这个引用这个引用在后续使用时可能是无效的。同样Fragment对象的目标和结果代码也不能包含在这个要保存的状态中。
参数:
f--->要保存状态的Fragment对象。
返回值:
生成的状态对象,如果没有感兴趣的由Fragment所创建的状态,那么这个方法会返回null。
eg
实现 activiy和Fragment的交互切换。
activity中的一个布局区域
<FrameLayout
android:id="@+id/framelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/ll" >
</FrameLayout>
fragment
public class GameFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 获得被绑定到那个Activity的实例
Activity activity = getActivity();
TextView tv = new TextView(activity);
tv.setText("娱乐大爆炸: 王全安xx被抓了...");
tv.setTextSize(25);
tv.setTextColor(Color.GREEN);
return tv;
}
}
实现切换
private FragmentManager fm;
fm = getFragmentManager();
切换 我们需要借助FragmentManager
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.framelayout, new NewsFragment());
ft.commit();
就是将activity的一部分区域替换为fragment 我们在Fragment中直接创建一个view对象。
注意 我们在另外一个Fragment中对一个Fragment页面进行调整的时候 我们可以先获得这个fragment 进而实现我们相关的操作。
FragmentManager fragmentManager = getFragmentManager();
ContentFragment contentFragment = (ContentFragment) fragmentManager.findFragmentById(R.id.content_fragment);
// 调用正文Fragment类中的方法设置类型和图片
contentFragment.setTitle(type);
contentFragment.setImageID(imageID);
Fragment的生命周期
- onAttach 绑定到activity
- onCreate 创建fragment
- onCreateView 创建fragment的布局
- onActivityCreated activity创建完成后
- onStart 可见, 不可交互
- onResume 可见, 可交互.
- onPause 部分可见, 不可交互
- onStop 不可见
- onDestroyView 销毁fragment的view对象
- onDestroy fragment销毁了
- onDetach 从activity解绑了.
- Fragment向下兼容
- 把所有Fragment和FragmentManager改成support-v4包下的类.
- 把Activity的继承改为FragmentActivity(support-v4包下的)
#总结 1、; 每个fragment都对应一个xml文件 他的xml文件的书写类似
#于我们main的xml文件 。同时每个fragment有都对应一个 fragment程#序。 将每个fragment作为组建在main的xml文件中住组合使用。
#注意版本号要调整。
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
add(int
containerViewId,
Fragment fragment)
这个地方就是 当我们的布局中还没有Fragment的时候 我们借助这个add方法来实现我们的向布局中添加展示的Fragment
相关文章推荐
- Fragment的生命周期及相关介绍
- Tab相关控件API中的介绍翻译比较:TabLayout,FragmentTabHost,AppBarLayout
- scala相关介绍
- opensslBIO系列之2---BIO结构和BIO相关文件介绍
- 非窗口类中使用定时器的方法及相关知识的介绍
- Dflying的Atlas相关介绍/教程文章合辑PDF下载
- CMM/CMMI的相关介绍
- 开源 SOA 工具的编程技术: Apache Beehive 相关介绍
- mysql安装图解(详细步骤),配置,相关图形工具介绍及使用,中文支持
- J2ME结构与相关规范介绍
- ESFramework介绍之(33)―― AS与FS通信实现及相关
- JDO及相关资源介绍
- IP地址相关知识的介绍
- 用C#实现基于查寻字符串的文件行查询器(2)-相关技术介绍
- Python 介绍及相关资料
- 介绍几本 PHP 书籍和一些 PHP 相关资源链接
- Rational中相关组件的简单介绍
- RSS相关介绍
- PHP PEAR HTTP相关Package介绍
- openssl之RSA相关函数介绍