首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fragment初识

由于平板电脑屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件空间更大。利用片段实现此类设计时,您无需管理对视图层次结构复杂更改。...通过将 Activity 布局分成片段,您可以在运行时修改 Activity 外观,并在由 Activity 管理返回栈中保留这些更改。...这特别重要,因为模块化片段让您可以通过更改片段组合方式来适应不同屏幕尺寸。 在设计可同时支持平板电脑和手机应用时,您可以在不同布局配置重复使用您片段,以根据可用屏幕空间优化用户体验。...不过,在手机尺寸屏幕上,没有足以储存两个片段空间,因此Activity A 只包括用于显示文章列表片段,当用户选择文章,它会启动Activity B,其中包括用于阅读文章第二个片段。...注意,此时Fragment还没有被销毁哦!!!

1.2K20

你不知道 DOM 变动观察器:Mutation observer

DOM 子树任何更改作出反应。...在 HTML 标记(markup)此类片段如下所示: ......我们找到 HTML 代码片段并高亮显示它们。 现在让我们继续。假设我们要从服务器动态获取资料。我们将 在本教程后续章节[4] 中学习进行此操作方法。...例如,我们有一个由其他人编写论坛,该论坛可以动态加载内容,并且我们想为其添加语法高亮显示。没有人喜欢修补第三方脚本。 幸运是,还有另一种选择。...当我们停止观察,观察器可能尚未处理某些更改。在种情况下,我们使用: observer.takeRecords() —— 获取尚未处理变动记录列表,表记录是已经发生,但回调暂未处理变动。

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

Android Jetpack - LiveData

每次应用程序数据更改时,你观察者都可以在每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止而崩溃 如果观察者生命周期处于非活动状态...,例如在后端堆栈活动情况下,则它不会收到任何 LiveData 事件 不再需要手动处理生命周期 UI 组件只是观察相关数据,不会停止或恢复观察。...例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...在数据变动及时通知 Observer,这一步通常在 UI 控制器完成 注意:你可以使用 observeForever(Observer) 方法注册没有关联 LifecycleOwner 对象观察者...具体可以参考 Android Jetpack - Room 一文所提供代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象

2K30

详细介绍安卓布局性能优化之(include 、merge、ViewStub)

include标签 include标签常用于将布局公共部分提取出来供其他layout共用,以实现布局模块化,也是平常我们设计布局最多 include 官方文档 <?...include标签layout子View: private void initView() { //如果include布局根容器和include标签id设置是不同,这里获取mToolbar...2.某布局作为子布局被其他布局include,使用merge当作该布局顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局。...上述场景,我们通常解决方案就是:就是把可能用到View先写在布局里,再初始化其可见性都设为View.GONE,然后在代码根据数据动态更改可见性。...是一个不可见,实际上是把宽高设置为0View.效果有点类似普通view.setVisible(),但性能体验提高不少 第一次初始化时,初始化是ViewStub View,当我们调用inflate

1.4K10

带你快速掌握Flutter视图(Widgets)

StatelessWidgets适用于当我们描述用户界面不依赖于对象配置信息。 例如,在Android/iOS,我们需要用ImageView/UIImageView来显示logo。...如果要根据HTTP网络请求或用户交互后收到数据动态更改UI,则必须使用StatefulWidget并告诉Flutter框架Widget状态已更新,以便更新该Widget。...但是,即使Widget是有状态,如果包含它父窗口小部件本身不对这些更改(或其他输入)做出反应,父Widget仍然可以是无状态。...在Flutter,因为Widget是不可变,所以没有类似的方法。相反,我们可以传入一个函数或表达式,该函数或表达式返回一个Widget给父项,并通过布尔控制该Widget创建。...它需要一个 Ticker 当 vsync 发生来发送信号,并且在每帧运行时创建一个介于 0 和 1 之间线性插(interpolation)。

10.9K10

Helm Chart 开发 :7个常用Helm 函数

Go 函数可以在同一行或使用|管道符号接受(与 Linux shell 工作方式相同)。...使用子模板在模板之间共享代码片段 该include函数用于将子模板嵌入到模板任何位置。子模板可以存储在以下划线开头任何文件。...但该include功能实际上是如何发挥作用呢? 该include函数采用两个参数:子模板名称和根变量。当我开始学习该include函数,我认为....这意味着当我们在子模板内部调用.Values.replicaCount,Helm Values可以使用.Values 为了更好地理解这个重要概念,请考虑更改include函数并传递它,.Values...我们只是简单地调用该变量而不引用它父.Values变量。为什么?因为当我们通过函数调用它,我们已经将它作为根变量传递给子模板include。

49750

Angular v16 来了!

启用细粒度反应性,在未来版本,这将允许我们仅检查受影响组件更改 通过在模型更改时使用信号通知框架,使Zone.js在未来版本成为可选 提供计算属性,而不会在每个变化检测周期中重新计算...我们还声明了一个效果,每当我更改它读取任何信号,回调都会执行——在本例,fullName这意味着它也传递地依赖于firstName和lastName。...当我们将 设置firstName为“John”,浏览器将登录到控制台: "Name changed: John Doe" RxJS 互操作性 @angular/core/rxjs-interop作为...要尝试独立原理图开发人员预览,请确保您使用是 Angular CLI v16 并运行: ng new --standalone 您将获得一个更简单项目输出,没有任何NgModules. ...由于 Angular 编译器在构建执行检查,因此更改在运行时增加了零开销。多年来,开发人员一直 要求 此功能 ,我们得到了一个强烈迹象,表明这将非常方便!

2.5K20

Flutter 刷新页面:通过下拉刷新提升用户体验

当用户下拉页面,这个函数被调用,它任务是拉取新数据并更新我们应用状态。很重要一点是,这个函数返回 Future 来保持刷新指示器可见,直到新数据被下载且页面被更新。...; }); } 在上面的代码片段,fetchData 是一个假设异步函数,用来获取新数据。...,RefreshIndicator 包裹着一个 ListView.builder,根据最新数据动态地构建列表项。...先进技术和最佳实践 当我们完善 Flutter 应用程序时,采用先进技术并遵循最佳实践可以显著提高代码质量和可维护性,特别是在实现拉动刷新等功能。...当处理复杂数据和状态,考虑使用流 streams 或者 FutureBUilder 挂件来更新 UI,当新数据反应可用时。这保证在应用程序当前状态, UI 还是同步,即使数据被拉取和更新。

13710

响应Android系统事件

除此之外,有时候可能还需要让应用程序监听系统设置更改,对系统设置更改做出响应。...一、Configuration类 Configuration类专门用于描述手机设备上配置信息,这些配置信息既包括用户特定配置项,也包括系统动态设备配置。...HARDKEYBOARDHIDDEN_YES,为十六进制1。 keyboard:获取当前关联额键盘类型:该属性返回: KEYBOARD_12KEY:只有12个键小键盘。...当然,为了让Activity能监听系统配置更改事件,需要在配置Activity指定 androidiconfigChanges 属性,该属性可以支持 mcc、mnc、locale、touchscreen...(); } } 为了让Activity能监听到屏幕方向更改事件,需要在配置该Activity指定 androidiconfigChanges 属性,应用AndroidManifest.xml

1.4K90

ASP.NET 缓存:方法和最佳实践

这些部分最适合使用片段缓存和用户控件进行缓存。菜单和其他布局元素,尤其是那些从数据源动态生成元素,也应该用这种方法进行缓存。...如果需要,可以将缓存控件配置为基于对其控件(或其他属性)更改或由页面级输出缓存支持任何其他变动进行改变。...Add() 和 Insert() 之间唯一区别是,Add() 返回对已缓存对象引用,而 Insert() 没有返回(在 C# 为空,在 VB 为 Sub)。...但实际上,此特性并不适用于当前版本缓存 API,因为在从缓存删除缓存项之前,不触发或不完成回调。因此,用户将频繁地发出尝试访问缓存请求,然后发现缓存为空,不得不等待缓存重新填充。...缓存数据引用模式 每当我尝试访问缓存数据,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存数据访问。

1.6K20

精通MVC3摘译(2)-生成URL

3.所有的片段变量必须满足路由约束。 必须清楚,路由系统不会尝试找出最佳匹配路由,它只会找到第一个匹配,使用此路由生成URL。后续路由则被忽略了。...此链接会在view显示,但是用户点击时候没有任何反应 第一个满足标准路由会生成一个非空URL,然后会终结URL生成进程,参数值也会被赋值。...当我们在描述路由匹配生成URL方法,我们提到,在尝试查找每个路由URL模式片段,路由系统会从当前请求查找,这个行为让很多程序困惑。...null) 你可能觉得路由系统不会匹配路由,因为我们没有提供color片段,并且也没有定义它默认。...我们传递null给另外片段变量值,表示我们没有可以提供。

80210

Android Jetpack - ViewModel

我觉得这个问题很重要,当我们使用任何一个新工具时候都需要弄清楚这个问题,要结合实际情况而非盲目跟随,接下来我会逐一尝试说明 ViewModel 对比传统方案优劣 只要你接触 Android 开发一段时间...好好数据在你转屏瞬间,莫名其妙消失了 发生以上情况和 Activity 配置更改有关, 屏幕旋转属于配置更改(Activity 生命周期内自行处理配置更改情况之一,其它类似的还包括接入外置键盘..._startTime } 2、关联 UI 控制器和 ViewModel UI 控制器必须知道自己和哪个 ViewModel 进行关联,这样它才能知道去哪里取回数据,注意,不要在 ViewModel 持有任何...ViewModel 结合 LiveData ViewModel 如果不结合 LiveData 来用的话就失去了它灵魂,正如人与人之间默契配合才能发挥出整个团队潜能,架构组件本着开放灵活原则,允许你单独集成使用它们其中任何一个...内部更新 elapsedTime 为当前时间距离 startTime 秒数,此处 elapsedTime 为 LiveData 类型,它会随着 ViewModel 初始化开始通过 Timer 自动更新

83420

通过实例,理解 Vue3 响应式设计

---- 响应式指的是变量(如:数组、字符串、数字、对象等)在其或它引用任何其他变量在声明后发生更改时更新能力。...上面的代码片段是 JavaScript 非响应式特性经典示例——因此,为什么更改没有反映在 sentence 变量呢?...当我们使用 setup 选项作为 Composition API 入口点,数据对象、计算属性和方法是不可访问,因为在执行 setup 组件实例尚未创建。...从上面的示例,我们可以看到,当我们使用响应式 cars 对象或 NumberOfHondas 更新 Honda ,两个实例都会更新。...当我们想要对特定组件 prop 执行额外操作,这会派上用场。 写在最后 在本文中,我们使用 Vue 3 中新引入一些方法和函数来了解 Vue 响应式设计师如何工作

1.6K30

Android自定义复合控件实现通用标题栏

了解了有哪些控件之后,就可以初始化这些控件对象,然后分别指定合适布局,动态添加布局。...,然后将属性赋值给对应控件,接着利用LayoutParams类对各子空间大小和位置进行设定,最后利用addView方法即可将这些子控件添加到控件整体布局。...这段代码另外一个难点是,当我两侧按钮同时有文字和图标,对于ImageView和TextView定位是个问题。...ImageView和TextView二者肯定就会重叠,这肯定不是想要结果。...) 来把对应控件定位在参数view控件右边,但是该参数需要是资源ID,可问题是在上面我们是动态添加ImageView,并没有在xml文件定义id。

71440

基础渲染系列(二十)——视差(基础篇完结)

当未定义任何内容,默认偏差0.42。在ApplyParallax简单地定义它来实现。请注意,宏定义并不关心函数范围,它们始终是全局。 ?...当我们正在执行操作与这些方法之一匹配,我会说出来。 2.1 视差函数 标准着色器仅支持简单偏移视差映射。现在,我们要在自己着色器添加对视差光线 marching支持。...尝试对此进行编译,我们会收到一个着色器编译器警告和错误。警告告诉我们循环中使用了渐变指令。这是指循环内纹理采样。GPU必须找出要使用mipmap级别,并需要比较相邻片段UV坐标。...即使这样,片段也会并行处理。基本上,一起计算一批片段性能由需要最多迭代片段确定。因此,任何潜在性能提升都是可变且不可预测,并且会因GPU而异。...因此,当我们搜索,请禁用插。 ? 此循环还执行与原始循环相同基本工作。调整偏移量和步长高度,然后对高度字段进行采样。 ? 但是,每次迭代,UV增量和步长减半。 ?

2.9K20

dash.js:流媒体发展故事

当我们谈论 dash 总是绕不开 MPD,通过 MPD periods 字段,我们可以获取任何关于视频信息,所以今天我演讲也是以 period 字段进行划分。...第三阶段 好(坏)旧时光 当谈论 dash 旧时光,我们不可避免地谈论到 DVR 窗口。DVR 窗口与动态传输流密切相关,遭遇主要问题是:可用媒体片段呈现时间在移缓冲区之外。...不幸是,在某些情况下会遇到问题,即在有效 DVR 窗口中不包含任何片段,因此在检查 MPD 并专门检查第二个时间轴属性,可能在 DVR 窗口中没有找到任何片段,那现在怎么办?...在播放期间,允许底层应用程序在有效 DVR 窗口内搜索。 在图 4 ,最后一个可用段(段 5)演示结束时间在 DVR 窗口之外。在这种情况下,播放器没有要下载和播放片段。...; 当缓冲区为空优先发送段(例如:在启动,在频道更改、搜索或快速音频切换),或者当缓冲区已经很短情况下优先发送段(比如说在低延时直播场景下)。

2.1K10

如何在页面监听“不存在” DOM 节点

没有什么方法可以避免无意义轮询,又能在渲染完成第一间加载脚本呢?这就要提到 MutationObserver 这个浏览器 API 了。...变动观察器MutationObserver 是 Web API 一个接口,用于监测 DOM 树变化。它可以观察特定节点或其子节点任何更改,例如添加、删除或修改子节点、属性变化、文本变化等等。...config 对象有如下这些,这些布尔选项表示会“对哪些更改做出反应”:childList:监听子节点变动subtree:监听所有后代节点变动attributes:监听节点特性变化attributeFilter...例如在发生改动触发自动保存等,你可以在下面简单代码片段查看效果与代码,修改文本并观察控制台输出:jcodeMutationRecord 对象有如下一些属性:type:变动类型,attributes...(XML)oldValue:修改前,仅适用于特性或文本更改(需设置相应选项 attributeOldValue / characterDataOldValue)Div 水印在上面的文本编辑器例子

1.2K40

安卓入门-第三章-安卓常用控件使用方式

可以看到,EditText显示了一段提示性文本,然后当我们输入任何内容,这段文本就会自动消失。  不过,随着输入内容不断增多,EditText会被不断地拉长。...我们还可以在程序通过代码动态更改ImageView图片,然后修改MainActivity代码,如下所示: public class MainActivity extends AppCompatActivity...,调用活动方法就能改变拖动条的当前,达到最大,拖动条相当于就到了100%  ProgressBar用于在界面上显示一个进度条,表示我们程序正在加载一些数据。...visible 表示控件是可见,这个是默认,不指定android:visibility ,控件都是可见。...然后在代码动态更改进度条进度。

1.8K20
领券