[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); } }
相关文章
- java商城小程序收藏
- 巴士团小程序
- 微信小程序this作用域
- 从零开始搞监控系统(5)——小程序监控
- Pyinstaller打包配置UPX缩小程序包大小,打包时出现UPX is not available处理方法
- 如何将小程序游戏引入自有APP?(Android篇)
- 超级App成为小程序流量新的变现突破口
- 小程序小游戏怎样实现在自己的App里上架运行?
- Vue 网络请求模块封装 (axios)
- 微信小程序中的支付宝支付
- 小程序中商家入驻提醒、新订单提醒
- 用这个库 3 分钟实现让你满意的表格功能:Bootstrap-Table
- 利用Frida绕过Android App(apk)的SSL Pinning
- Flask 框架:运用Axios库实现前后端交互
- 搭建Typecho小程序(QQ微信通用)
- Drozer-Android安全测试
- 个推支持小程序消息推送,助力开发者实现用户高触达、高转化
- android 终端模拟器
- android 系统浏览器 源码-Android 最最最简单的浏览器代码
- Android画中画(PIP)模式使用