android学习(一) 在运行时为 Activity 添加Fragment
来源:互联网 发布:手机淘宝首页热点 编辑:程序博客网 时间:2024/05/18 00:37
- 如需执行添加或移除Fragment等事务,您必须使用 FragmentManager 创建 FragmentTransaction,后者将提供添加、移除、替换片段以及执行其他片段事务所需的 API。
- 如果您的 Activity 允许移除和替换片段,应在 Activity 的 onCreate() 方法执行期间为 Activity 添加初始片段。
- 在处理片段(尤其是在运行时添加片段的情况下)时,请谨记以下重要准则:您的 Activity 布局必须包含一个可以插入片段的容器 View。
- 以下布局是上一课所示布局的替代布局,一次只显示一个片段。若要替换片段,Activity 的布局包含一个用来充当片段容器的空 FrameLayout。
res/layout/news_articles.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" />
添加Fragment
- 在您的 Activity 内,使用 Support Library API 调用 getSupportFragmentManager() 以获取 FragmentManager。然后,调用 beginTransaction() 创建一个 FragmentTransaction,并调用 add() 添加一个片段。
- 您可以使用同一 FragmentTransaction 为 Activity 执行多片段事务。做好更改准备时,您必须调用 commit()。
import android.os.Bundle;import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); // 检查活动是否使用布局版本 // the fragment_container FrameLayout if (findViewById(R.id.fragment_container) != null) { // 但是,如果我们正在从以前的状态恢复,我们不需要做其他事请应当return; // 可能会有重叠的片段 if (savedInstanceState != null) { return; } // 在Activity里创建新的Fragment HeadlinesFragment firstFragment = new HeadlinesFragment(); // 如果Activity是想将Intent传递给Fragment,调用getExtras()作为参数传递给Fragment firstFragment.setArguments(getIntent().getExtras()); // 添加一个fragment给'fragment_container'的FrameLayout getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container,firstFragment).commit(); } } }
由于该Fragment已在运行时被添加到 FrameLayout 容器(而不是利用 元素在 Activity 布局中进行定义),所以,可以从该 Activity 中移除该Fragment,并将其替换为其他片段。
替换Fragment
替换片段的步骤与添加片段类似,只不过调用的方法从 add() 改为 replace()。
请谨记,当您执行替换或移除片段等片段事务时,通常最好让用户能够回退并“撤消”更改。 要让用户回退所执行的片段事务,您必须先调用 addToBackStack(),然后再提交 FragmentTransaction。
注:当您移除或替换一个片段并向返回栈添加事务时,系统会停止(而非销毁)移除的片段。 如果用户执行回退操作进行片段恢复,该片段将重新启动。 如果您不向返回栈添加事务,则系统会在您移除或替换片段时将其销毁。
示例:
//创建Fragment,并给它一个参数,指定它应该显示的文章ArticleFragment newFragment = new ArticleFragment();Bundle args = new Bundle();args.putInt(ArticleFragment.ARG_POSITION, position);//ArticleFragment里的常量ARG_POSITIONnewFragment.setArguments(args);FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container, newFragment);transaction.addToBackStack(null);transaction.commit();
addToBackStack() 方法使用的可选字符串参数会为事务指定一个唯一的名称。除非您计划使用 FragmentManager.BackStackEntry API 执行高级片段操作,否则并不需要该名称。
addToBackStack()如果回退所有所执行的fragment保留Activity进行其他事件的处理
摘自android developer
0 0
- android学习(一) 在运行时为 Activity 添加Fragment
- 在Activity运行时添加Fragment
- Android学习笔记四(二) 为Activity添加Fragment
- android开发之activity运行时添加fragment
- android开发之activity运行时添加fragment
- Android学习——如何将Fragment添加到Activity,并且在Activity中显示
- 在Activity中添加Fragment
- Android-Fragment(2)-在Activity中动态添加删除
- 当activity运行时添加fragment(fragment应用的第二种方法)
- activity运行时添加fragment(第二种方式使用fragment)
- 在Activity中静态、动态添加Fragment
- 在android中的activity或者是fragment中添加时间选择器
- 构建灵活的 UI -Activity 运行时为 Activity 添加片段
- Activity与在Android的碎片Fragment
- 【Android】20、在运行时添加碎片
- Activity动态添加fragment
- Activity动态添加Fragment
- 使用IndicatorFragmentActivity添加子级Fragment时,在Activity中获取子级的方法
- Master-Mind Hints UVA
- Java编程思想 第八章读书笔记-多态
- 你真的了解volatile关键字吗?
- Ueditor
- C语言与C++的比较
- android学习(一) 在运行时为 Activity 添加Fragment
- Puzzle UVA
- leetcode
- 定时器中断
- PHP经典实例读书笔记(练习:日历)
- python关键字和非关键字参数(可变长参数)
- 拓扑排序小记
- Molar mass UVA
- 微信小程序中的swiper组件