Activity托管Fragment的流程、由来与相互关系

Activity托管Fragment的流程、由来与相互关系,第1张

1理解

托管:

Activity有自己的View,Fragment也有自身的View,但是Fragment自身不具有显示在屏幕的能力。Activity有SetContentView()方法。

Fragment要把自身的View嵌入到Activity的view层级结构里,才能显示。

Activity的View需要提供一处位置来放置Fragment的View。

UI Fragment:

管理用户界面的fragment被称为UI Fragment。

创建UI Fragment:

获得FragmentManager的方式

Android 30以下:getSupportFragmentManager()

Android 30以上:getFragmentManager()

The differences between them:

ActionBarActivity已经过时,被他的父类 AppCompatActivity 代替,所以Active继承AppCompatActivity 就OK。

groupId:

groupId通常是类库的基础包名,唯一标示了Maven仓库中的依赖类库,比如comandroidsupport

artifactId: (artifact :n 人工制品,手工艺品,加工品; 石器;)

artifactId是包中的特定库名,如上例中的support-v4。comandroidsupport包中有很多不同的库,如support-v7,support-v13,appcompat-v7等等。Google使用basename-vX模式来作为支持库的命名约定。-vX指所支持的最低API级别。

version:

version是指类库的版本号。可以用+号来模糊具体版本。

Fragment优点

Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。

Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。

Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。

Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。

Fragment 解决Activity间的切换不流畅,轻量切换。

Fragment 替代TabActivity做导航,性能更好。

Fragment 在42版本中新增嵌套fragment使用方法,能够生成更好的界面效果。

Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。

可以从startActivityForResult中接收到返回结果,但是View不能。

反正我是没有看到fragment有什么缺点(可能是我程度没达到),再说它(fragment)就是一个api而已感觉不好就用activity就ok了。

js怎么获取div自适应高度值 然后赋值给另外的div

假设div根据浏览器大小改变时跟着自适应改变。

那么js就写在浏览器视窗改变时,获取div的高度值,然后赋值给需要的div。

浏览器改变的时候获取值或者改变值,是有对应的js方法的

求助,swift中怎么让UILabel自适应高度

第一 如果在Cell中用自动布局,拖好constrains,改变Cell的高度。

第二 如果是自己新增的,计算字串的高宽,然后改变frame,计算高宽用

我写的一个extension嘛

extension NSString {

func textSizeWithFont(font: UIFont, constrainedToSize size:CGSize) -> CGSize {

var textSize:CGSize!

if CGSizeEqualToSize(size, CGSizeZero) {

let attributes = NSDictionary(object: font, forKey: NSFontAttributeName)

textSize = selfsizeWithAttributes(attributes)

} else {

let option = NSStringDrawingOptionsUsesLineFragmentOrigin

let attributes = NSDictionary(object: font, forKey: NSFontAttributeName)

let stringRect = selfboundingRectWithSize(size, options: option, attributes: attributes, context: nil)

textSize = stringRectsize

}

return textSize

}

}

constrainedToSize 如果一行,用CGSizeZero,否则用CGSizeMake(你想要的宽度, CGFloat(MAXFLOAT)

swift中怎么让UILabel自适应高度

1、完成程式码:ctrl+\ 任何地方按下此组合键,均会提示相应的参考栏位;

2、错误提示:alt + enter 顾名思义,当系统报错时,按下此组合可以检视系统提示;

3、自动完成字串: ctrl+L ctrl+k 后者(Ctrl+L没用过)组合键自动打出字串,每按一次打出一个新串,串序自下向上;

4、右键:修复自动汇入

5、右键:格式化程式码风格

6、汇入所需包:ctrl+shift+i

7、格式化程式码:alt+shift+F

8、注释/取消注释:ctrl+/,此功能支援多行注释,但首先需选中所要注释行

9、psvm+Tab 生成Main方法

10、sout + Tab 生成输出语句

11、ctrl+enter 增加空白行,游标不移动;

12、alt+shift+F 格式,不太懂什么意思,高手可以解释下;

13、alt+enter 不太会用;

13、Alt+insert 插入程式码(包括建构函式,setter和getter方法等);

14、Alt+Shift+O 转到类;

15、Ctrl+Tab 在开启的原始档中进行切换;

16、Ctrl+O或Ctrlt+单击 转到源,即按住Ctrl键然后单击某源就可以开启原始码;

补充几条:

Shift+F6 运行当前程式

Ctrl+Shift+F5: 除错当前程式

Ctrl+F 快速查询程式码中的字串

Ctrl+Delete 也是一个比较常用的shortcut,大家可以试试;

Ctrl+Shift+Right 向右逐个选中

Ctrl+Shift+Left 向左逐个选中

Ctrl+Shift+UP/DOWN 复制当前行到下一行,游标不动

一个div怎么在另一个自适应高度的div垂直居中 两个div不是子父集关系

第一个div属性position:absolute;left:50%; :50%; margin-left:-(width/2);

margin-:-(height/2);注意第一个div高度宽度都应该是定值的;

意思是两个div的宽高都是用百分比设定的,那最好是让他俩有点父子关系,或者,第一个div只能是做成d窗显示的,居中在整个萤幕中央了

求获取div宽值赋值给高的JS程式码

<div height=40px width=70px onclick="gofuzhi(this)">点选我</div>

<script>

function gofuzhi(obj){

var wdth = $(obj)attr("width");

$(obj)attr('height', wdth);

}

</script>

测试的时候别忘记引入 jquery 档案

提问qml中的listview中的item怎么自适应高度

你设定放到listview里面的引用控制元件 例如你listview里面显示的是textview那么你就设定该控制元件高度就OK!

UIButton可以自适应高度吗,像UILabel一样

unbutton中有一个uilabel,可以进行设定

先算 button title 的高度,在设定button的frame 怎么样

Fragment与Activity。什么时候用什么时候不用?

(使用Fragment完全替换Activity,而Activity用来管理Fragment或者把fragment当作一个轻量级activity使用)

作为 Activity 界面的一部分,Fragment 的存在必须依附于 Activity,并且与 Activity 一样,拥有自己的生命周期,同时处理用户的交互动作。同一个 Activity 可以有一个或多个 Fragment 作为界面内容,并且可以动态添加、删除 Fragment,灵活控制 UI 内容,也可以用来解决部分屏幕适配问题。

另外,support v4 包中也提供了 Fragment,兼容 Android 30 之前的系统(当然,现在 30 之前的系统在市场上已经很少见了,可以不予考虑),使用兼容包需要注意两点:

一边看一边提出一些问题:

个人对提出问题的回复:

attach与detach及回退栈的配合,如果当你detach fragment时,那么被移除的fragment就被停止了(没有消亡,但视图已经销毁了),如果用户导航回来重新加载这个fragment,它将会重新启动,视图也会重新创建,如果你没有把事务加入到堆栈中,当fragment被remove时,这个fragment也就消亡了。

通常,Fragment 与 Activity 通信存在三种情形:

首先是尺寸的适配,android平板和手机相比,由于pad的大屏特性,屏幕的尺寸和分辨率的差别就很明显,例如以下平板信息:

小米平板:444 densityDpi:320 size:1536x2048

华为平板:511 densityDpi:240 size:1200x1920

华为荣耀某平板:61 densityDpi:320 size:1200x1920

三星平板:601 densityDpi:320 size:1600x2560

同样的一套mdpi下的layout或者values放在上面华为荣耀平板和三星平板上显示差别就很大。下面是开发中关于设计的一些心得:

1 开发中保持不增加布局层级的情况下采用百分比weight属性;针对不同尺寸的设备百分比缩放是体验最完美的,但由于实际开发中复杂界面如果采用百分比,无疑增加了层级复杂度,反而降低了性能,降低了可维护性和扩展性。

2 layout中使用的dp/sp值采用@dimen引用方式写进dimensxml里面;为了方便采用多个values文件夹例如values-sw600dp,values-1280x720等针对特定屏幕适配。自然也可以采用layout-1280x720这样的来区分不同布局,但如果只是尺寸上的适配,无疑用dimens维护几套尺寸值是最容易的,还可以写个读写文件工具,修改一个values里的dimens文件后更新到所有的values文件;

3 以上面的华为荣耀平板为例,采用sw(smallwidth)的方式进行适配,比较简单的计算方式,以mdpi(160)为标准,此平板的screenWidthDips = 1200/(320/160) = 600dp,所以values-sw600dp可以适配此平板(有的平板系统宽高是包含屏幕的虚拟按键的高度);

4 为了苛求在不同尺寸平板上的体验,采用values-1200x1920,values-1600x2560这种方式,即为每个屏幕增加尺寸适配,工作量和效率来说不会影响太大,毕竟可以通过软件工具生成多套;

除了界面方面,平板开发上的模块化采用Fragment更多,以及Fragment嵌套Fragment:

5 Fragment中调用startActivityForResult,如果要在Fragment的onActivityResult里回调处理,那么不要采用getActivity()startActivityForResult方法,且宿主Activity如果重写了onActivityResult方法的,必须调用superonActivityResult,否则Fragment的onActivityResult方法不会回调,这点可以从Activity的源码中看出来;

6 嵌套在Fragment里的子Fragment的onActivityResult如果需要回调则要自己处理;

7 Fragment嵌套Fragment时,在Fragment里采用getChildFragmentManager()管理子Fragment,用法跟getSupportFragmentManager()一样;子Fragment之间的通信,可以采用事件总线方案进行解耦,例如Otto/EventBus,但可读性会下降,所以详细的注释还是必要的;

奇葩问题年年有,今天又碰到一个,最近呢,在项目开发维护中遇到这样一个bug,vivo某某型号手机,三指头同时下滑,瞅瞅效果图,屏幕露出半个桌面来,而我们的应用布局发生重叠,不得不佩服我们的测试**姐,这样奇葩问题,你都找得到,怎么办呢,百度谷歌呗!

这样子,在当前页面的Activity中的onCreate方法中输出日志,当页面首次打开的时候有日志输出,当三个手指下滑的时候,又有日志输出,ok,到这里问题已经明朗,Activity重新创建了,显然因为生命周期方法重复执行导致它承载的Fragment出现了布局折叠问题。

当手机屏幕变化,比如横竖屏切换,布局变化,屏幕尺寸改变等,在不经过设置时activity会被重新启动创建,而且还不止一次,而要防止这个现象的发生,就需要配置configChanges这个属性了。

找到了原因,那么开始实施解决方案。

在AndroidManifestxml中配置configChanges这个属性如下

当配置完成后,再次发布程序到手机,日志不在重复打印,页面也能够正常显示。

这样配置

android:configChanges="orientation"

那么横竖屏切换时就不会重新创建activity,那么这个属性到底是什么意思呢?

首先,要了解Android默认在情况下,在系统的配置改变的情况下会重新创建activity,这个很好理解,因为系统环境变了,当然要重新创建activity来适应这个改变喽。但是在很多时候我们不想在系统配置改变时重新加载activity,那么就需要

android:configChanges=“xxx|xxx”这个样子来搞定了。这里的xxx表这不同的系统配置的改变。

这里的xxx包含了很多种,就像我上边写的,可以用|来连接多个值。下面简单介绍下各个值的不同含义:

喝饱水,闭上嘴,往前走,靠双腿。

以上就是关于Activity托管Fragment的流程、由来与相互关系全部的内容,包括:Activity托管Fragment的流程、由来与相互关系、在Android开发中fragment有什么优缺点、js怎么获取div自适应高度值 然后赋值给另外的div等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9580799.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存