Android Fragment学习笔记(二)----Fragment界面添加和管理
Fragment界面添加
了解过fragment的生命周期等简单知识,于是去看官方文档来了解更多相关内容,要添加fragment到我们的UI界面中,给出了两种常用的方法,第一个是在activity的布局xml文件中使用<fragment>标签声明,第二个是在java代码中将fragment添加到一个ViewGroup,我比较习惯于使用第一种XML布局的方式,这里只是介绍了第一种, 在主activity中纵向加入两个fragment,使用<fragment>标签声明,每个fragment有各自的layout布局,都作为activity的一部分
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity"
- android:orientation="vertical"
- android:background="#7ecef4">
- <fragment
- android:name="com.example.fragementexam.FragementList"
- android:id="@+id/frag_list"
- android:layout_width="fill_parent"
- android:layout_height="0dp"
- android:layout_weight="2"/>
- <fragment
- android:name="com.example.fragementexam.FragementDetails"
- android:id="@+id/frag_detail"
- android:layout_width="fill_parent"
- android:layout_height="0dp"
- android:layout_weight="1"/>
- </LinearLayout>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
之后要为每一个fragment添加界面,单独写每个的layout,然后嵌入到activity中,我们必须要在每个Fragment的类中实现onCreateView()方法,并将layout添加进去;如果你的Fragement类本身继承了ListFragment,则不需要必须实现onCreateView(),因为默认已经返回了ListView控件对象
下面是一段Fragment类如何从布局xml文件中生成对象的,主要就是在onCreateView()方法中添加进去布局文件:
- public class FragementDetails extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.frag_detail, container,false);
- }
- }
其中
inflater用于向fragment中添加view
container用来存放fragment其layout的ViewGroup对象
savedInstanceState类似于onCreate()中相同的Bundle参数,用于恢复状态
inflater的inflate方法的三个参数分别是:
int resource:fragment的layout资源ID。
ViewGroup root:存放fragment的layout的ViewGroup
boolean attachToRoot:是否在创建fragment的layout时,把layout添加到container上面去
Fragment的管理方式
要管理fragment,我们需要用到FragmentManager,在fragement所在的activity中通过getFragment来获得,FragmentManager常用之处;
1使用方法findFragmentById()或findFragmentByTag(),获取activity中已存在的fragment们。
2使用方法popBackStack()从activity的后退栈中弹出fragment们(这可以模拟后退键引发的动作)。
3用方法addOnBackStackChangedListerner()注册一个侦听器以监视后退栈的变化。
----------------------------------------------------------------------------------------------------------------------------------------------------
通过FragmentManager我们还可以来执行对fragment的事务操作,即在同一时刻执行一组动作,首先通过begintransaction获取一个事物的实例,然后可以执行一系列的事务操作,如add(),remove(),replace(),最后使用commint()方法提交事务
下面的代码片段展示了一个简单的事务操作
- public class FragmentPreferences extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- getFragmentManager().beginTransaction()
- .replace(android.R.id.content, new PrefsFragement()).commit();
- }
- public static class PrefsFragement extends PreferenceFragment {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.preferences);
- }
- }
- }
值得注意的是只能在activity处于可保存的状态时提交事务(比如onPause和onStop方法中),否则会引起异常,这是因为fragment的状态会丢失。如果要在可能丢失状态的情况下提交事务,请使用commitAllowingStateLoss()。
Android Fragment学习笔记(二)----Fragment界面添加和管理的更多相关文章
- Android之Fragment学习笔记②(Fragment生命周期)
一. Fragment生命周期图 二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...
- Android Studio 学习笔记(二):布局简介和xmlns说明
初学Android Studio,是在b站看的教程视频,这里的笔记也是以其为基础的,个人强烈安利: [天哥]Android开发视频教程最新版 Android Studio开发 Android 布局简介 ...
- Rancher学习笔记----在UI界面添加主机页面无法正常显示
今天在学习rancher添加主机的时候,遇到了一个小问题,但是困扰老娘一上午 问题描述:在点击添加主机的时候,页面有跳转,但是页面显示为空,没有任何可选项.如下正常界面: 解决办法是:请换个浏览器
- Android开发学习笔记--一个有界面A+B的计算器
做了一个A+B的APP,虽然很简单,但是作为初学者还是弄了几个小时才弄好,什么东西都要看书或者百度,但最后成功了,还是很开心的,收货蛮大的.现在把过程写一下: 首先给出效果图: 一开始布局一直有问题, ...
- Android:日常学习笔记(8)———开发微信聊天界面
Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.
- Android:日常学习笔记(7)———探究UI开发(1)
Android:日常学习笔记(7)———探究UI开发(1) 常用控件的使用方法 TextView 说明:TextView是安卓中最为简单的一个控件,常用来在界面上显示一段文本信息. 代码: <T ...
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
---------------------------------------------------------------------------------------------------- ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- Android:日常学习笔记(7)———探究UI开发(4)
Android:日常学习笔记(7)———探究UI开发(4) UI概述 View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...
随机推荐
- 19. javacript高级程序设计-E4X
1. E4X E4X是对ECMAScript的一个扩展, l 与DOM不同,E4X只用一个类型节点来表示XML中的各个节点 l XML对象中封装了对所有节点都有用的数据和行为.为了表示多个节点的集合, ...
- php 获取IP
<?php echo 'your ip is :'; if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER[" ...
- Match:Milking Grid(二维KMP算法)(POJ 2185)
奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上 ...
- log4j:WARN No appenders could be found for logger
直接写我的解决办法: 在src下面新建file名为log4j.properties内容如下:# Configure logging for testing: optionally with log f ...
- Ios cordova安装
安装NODEJS:http://nodejs.org/ (如果你安装了旧版本的需要手动安装npm,不过最新版的自带了) 进入终端命令行使用npm安装cordova如下: $ sudo npm inst ...
- Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法
(一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...
- NYOJ题目916胖子小的百宝袋
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAL6CAIAAAC+R9cJAAAgAElEQVR4nOydO5LcvM6GzyYmn4U47o
- Mac系统下使用VirtualBox虚拟机安装win7--第五步 共享文件夹设置
1.启动virtualbox--选中win7虚拟机--点击设置--点击共享文件夹--点击右侧按钮添加共享文件夹
- 索引的重载 str["name"] str[i]
class Program { static void Main(string[] args) { IndexClass names = new IndexClass(); names[] = &qu ...
- 使用Timer和ScheduledThreadPoolExecutor执行定时任务
Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ...