[android] fragment的动态创建
在一个商业软件中,会有很多的界面,如果没一个界面对应一个activity,那么activity会非常的多,清单文件也会非常的乱,谷歌在android3.0以后引入了新的概念叫fragment
fragment无需在清单文件中配置,轻量级的activity,在所属的activity布局文件中进行配置
在布局文件中使用fragment控件
添加<fragment>节点,设置名称是fragment指向的类全路径
其他属性和别的控件一样
新建一个类Fragment1继承系统的Fragment类,此时会报错误,是因为,我们兼容的android系统最低版本是8,fragment是11版本才引入的,可以先把兼容版本改成11
重写onCreateView()方法,当fragment被创建的时候回调的方法,返回当前的View对象,传递进来一个LayoutInflate对象,
调用LayoutInflate对象的inflate()方法,获得View对象,参数:资源,ViewGroup对象
fragment最初设计的时候,是为了适应平板的大屏幕,例如,左侧一个listview,右边一个fragment,点击ListView的不同的条目,右边fragment的内容随之变化,用户体验更好
动态创建
实现,当用户竖着拿手机显示一个界面,当横着拿时显示另外一个界面
判断当前手机的朝向,通过屏幕的宽度和高度的对比来实现
调用getWindowManager().getDefaultDisplay().getWidth()获取宽度
调用getWindowManager().getDefaultDisplay().getHeight()获取高度
如果高度大于宽度,是竖屏
如果宽度大于高度,是横屏
新建Fragment1和Fragment2类,继承系统的Fragment类
获取Fragment对象,通过new出来
获取FragmentManager对象,通过getFragmentManager()方法
调用FragmentManager对象的beginTransaction()方法,开启事务,获得FragmentTransaction对象
调用FragmentTransaction对象的replace()方法,用Fragment替换当前界面,参数:containerViewId,Fragment对象
containerViewId是容器的id,可以使用android.R.id.content代表当前界面的id
调用FragmentTransaction对象的commit()方法,提交事务
模拟器ctrl+f11切换横竖屏
MainActivity.java
package com.tsh.myfragment; import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
// 判断横竖屏
int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
FragmentManager fm = getFragmentManager();
FragmentTransaction fr = fm.beginTransaction();
if (width < height) {// 竖屏
fr.replace(android.R.id.content, f1);
} else {// 横屏
fr.replace(android.R.id.content, f2);
}
fr.commit();
}
}
Fragment1.java
package com.tsh.myfragment; import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class Fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment2, null);
}
}
[android] fragment的动态创建的更多相关文章
- Android研究之动态创建UI界面具体解释
Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...
- Android开发之动态创建多个按钮
//获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...
- Android中ViewPager动态创建的ImageView铺满屏幕
ImageView imageView=new ImageView(context); imageView.setScaleType(ScaleType.FIT_XY);//铺满屏幕
- Android 动态创建Fragment
Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fr ...
- Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment
你能够把fragment看成是activity的模块化部分.它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个"子activity&quo ...
- Fragment碎片的创建和动态更新
Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_frag ...
- Android Fragment动态添加 FragmentTransaction FragmentManager
Fragment常用的三个类:android.app.Fragment 主要用于定义Fragmentandroid.app.FragmentManager 主要用于在Activity中操作Fragme ...
- Android学习路线(二十)运用Fragment构建动态UI
要在Android系统上创建一个动态或者多面板的用户界面,你须要将UI组件以及activity行为封装成模块.让它可以在你的activity中灵活地切换显示与隐藏. 你可以使用Fragment类来创建 ...
- fragment 事务回滚 ---动态创建fragment
import java.util.Date; import java.util.LinkedList; import com.qianfeng.gp08_day23_fragment5.fragmen ...
随机推荐
- 响铃:蜗牛读书“文”、网易云信“武”:游戏之外网易的AB面
文|曾响铃来源|科技向令说(xiangling0815) 2019年开年,网易又"搞事情"了. 近日,网易集团旗下网易云信.网易七鱼主办的"网易MCtalk泛娱乐创新峰会 ...
- BZOJ 2200--[Usaco2011 Jan]道路和航线(最短路&拓扑排序)
2200: [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1128 Solved: 414[Submit] ...
- Jmeter 结构、原理介绍
Jmeter结构.原理介绍 一.Jmeter 简介 1.是基于java语言的开源的应用软件. 2.可以进行接口测试.性能测试.接口及性能的自动化测试. 二.Jmeter体系结构 元件:可以理解为每一个 ...
- BitArray源码解析
BitArray是C# System.Collections内置的集合,用于帮助进行位运算. BitArray的使用示例 // 创建两个大小为 8 的点阵列 BitArray ba1 = new Bi ...
- javaScript中BOM
BOM是browser object model的缩写,简称浏览器对象模型 主要处理浏览器窗口(window)和框架(iframe),简述了与浏览器进行交互的方法和接口, 可以对浏览器窗口进行访问和操 ...
- postgresql和redis
redis 和postgresql区别以及其优缺点 一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾. 那么,经过周密的计算,一瞬间为0.36 秒, ...
- 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)——2.Programming Assignments: Building your Deep Neural Network: Step by Step
Building your Deep Neural Network: Step by Step Welcome to your third programming exercise of the de ...
- godaddy 问题
1. 域名被锁,打电话咨询后.说发送被锁的域名到: change@secureserver.net 去解锁.
- 独立部署GlusterFS+Heketi实现Kubernetes共享存储
目录 环境 glusterfs配置 安装 测试 heketi配置 部署 简介 修改heketi配置文件 配置ssh密钥 启动heketi 生产案例 heketi添加glusterfs 添加cluste ...
- GitLab 修改主机名,更换 IP 配置,配置 SMTP
# find / -name gitlab.yml /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml /var/opt/gitla ...