详情

全站展示位

Jetpack Compose 笔记(4)drivedStateOf

数据的转换 对于 Compose 中的数据,用 mutableStateOf() 包裹来实现监听刷新我们已经轻车熟路。那如果一个数据依赖于另一个或多个数据怎么办?这就用到 derivedStateOf(),它专门用于数据的转换,当上游数据发生变化时会自动刷新下游数据,进一步刷新 UI。有点类似 Li。。。

推荐

搞懂 Java 与 Kotlin 泛型

本文讨论的「泛型」只局限于 Java / Kotlin 中。 什么是泛型 泛型本质上是一个确保类型安全的手段,它属于那种没有也罢有则更佳的特性。泛型几乎没有扩展 Java 能力的边界,而是提高了编码效率与可维护性,减少模板代码并降低出错机率。这么说的原因是使用 Object 就可以传递任意数据,没有必要使用泛型。 所有写 Java 的人都离不开泛型,比如 List<String> 但主动写一个泛型类的人就不多了,其中一个原因是对泛型的能力缺乏清晰的认识,所以不知道什么时候可以使用这个利器。 泛型适用场景有以下几个: 类/接口内部的数据或操作限制于某种数据类型,但这个类型本身可以有多种选择。List 就是这个一个典型用例。 方法的参数/返回值限制于某种类型,但每次调用的时候这个类型可能不一样。(泛型方法) 对参数或返回值类型施加额外的限制。 比如有这样一个方法 void merge(List l1, List l2),希望限制它两个参数的元素必须是同一个类型的且必须实现序列化接口,就可以借助泛型做到:<T extends Serializable> void merge(List<T> l1, List<T> l2) 这个用例中我们并不关心类型参数被实例化为何物,仅仅是用来施加限制。 泛型的实例化 泛型类 泛型只是一个占位符,在使用的时候(编译期)需要被实例化为具体的类型才有意义。这有点像形参与实参的区别。因为它只是一个占位符,所以定义泛型时候的名字无所谓,就像参数名一样。例如下面两种泛型定义等价: 1 2 3 4 5 6 public interface Shop<T> { T get(); } public interface Shop<balabala> { balabala get(); } 所谓泛型的实例化,就是给它确定具体类型的过程。但这个具体类型也可以是另一个泛型提供的,比如下面这个例子: 1 public class LargeShop<T> implements Shop<T> 左边的 T 是声明的类型参数,右边的 T 是用 LargeShop 的类型去实例化 Shop 泛型。同样类比传参:

Category: 路由器

🙅‍♂️ 若放弃自由来换取保障,自由和保障将一并逝去 ——哈耶克 🌎 Believe in OPENNESS

Jetpack Compose 笔记(4)drivedStateOf

数据的转换 对于 Compose 中的数据,用 mutableStateOf() 包裹来实现监听刷新我们已经轻车熟路。那如果一个数据依赖于另一个或多个数据怎么办?这就用到 derivedStateOf(),它专门用于数据的转换,当上游数据发生变化时会自动刷新下游数据,进一步刷新 UI。有点类似 LiveData 中 Transformations.switchMap 的作用。 Show me the code: 1 2 3 4 5 6 7 8 9 10 setContent { var name by remember { mutableStateOf("chenhe") } val upperName by remember { derivedStateOf { name.uppercase() } } Column { Text(upperName) Button(onClick = { name = "bob" }) { Text(text = "Change Name") } } } upperName 由 name 转换得来,一开始会显示 “CHENHE”,点击按钮后变成 “BOB”。好了,本节到此结束 😋

小米支架自拍杆—不止自拍

之前的线控自拍杆丢了,爱旅游的我缺少这么个神器简直不能忍,于是又找朋友要了个。(请不要过分在意“要”这个动词,另外,我才不告诉你们丢的那个也是要的 (′▽`〃))这货让我写篇评测…WTF?? 写就写吧,说不定哪天成了数码大V可要好好感谢他 (o゚v゚)ノ 噔噔噔噔 这次给我的是小米支架式自拍杆,就是这货↓ 包装 包装一脉继承小米的极简风,甚至连说明书都省去了,直接印刷在外壳上。 内有一个小盒子,里面是蓝牙遥控器。 主体 自拍杆主体是纯粹的支架,并没有任何连接线与按钮。自拍杆头部整体是可以以180°为单位进行旋转,主要是为了便于收纳。因为正面需要安装蓝牙遥控器,手机夹不得不旋转到背面进行折叠。 不同于常规自拍杆,这款手机夹除了可以前后俯仰调节角度之外,也支持以45°为单位进行旋转,因此可以实现手机竖直方向的拍摄。不过夹上手机后因为手机本身的阻挡,一般只能旋转±45°,如需切换横竖屏要先把手机拿下来。(如果你的手机只有半个手掌那么大的话就当我没说 = ̄ω ̄=) 手机夹接触面是橡胶(硅胶?傻傻分不清),质地柔软,摩擦力大,不伤手机也不容易脱落。官方说明写可以适配宽度在56-89mm的手机,网友说小米mix可以正常使用。相对于线控版自拍杆,此款取消了调节螺丝,改为固定阻尼的转轴,阻力刚刚好,用起来比来回拧螺丝方便不少。 因为整合三脚架的设计占用了不少空间,同时为了增加便携性以及手柄的握持感,只好牺牲了长度。完全伸展后加上手柄也只有40cm左右,与普通版70cm的长度有一定差距。其实40cm对于常规自拍差不多足够了,如果还想靠自拍杆举高高来欣赏被人群挡住的表演,可能有点困难。 另:完全伸展后有3段,一开始阻力比较大,要大胆拉开。 支架 支架算是这款最大的特色了。底部轻松掰开后即可快速变成一个三脚架。尾部采用了橡胶(硅胶?)材料,摩擦力大,几乎不用担心打滑现象。(但是这种材料容易沾灰,强迫症看着很难受)中间拉长杆的收纳部分也顺势当做了支架,在超重时可以分担压力吧。 当做支架使用时也是可以拉出伸长杆的。全部拉出后加上全金属荣耀7,在水平的床上依旧可以站住,稳定性还不错。 蓝牙遥控器 本款使用了分离式蓝牙遥控器,可以单独拿下来使用。安装处有凹槽,应该比较结实不会掉下来。遥控器采用 micro-usb 充电接口,接口除了充电,也兼具从自拍杆拿下时的缺口功能,使得拿下也是非常轻松。 遥控器按钮略硬,不注意的话有可能造成拍照抖动(希望你的手机有光学防抖),不过防抖不防手贱嘿嘿 ( ̄_, ̄ ) 总结 这是一个兼具创意与实用的产品,尤其适合男生。我想大部分男生应该不如妹纸那么喜欢自拍,自拍杆更多情况下是作为辅助工具使用。 带有三脚架的自拍杆在平日可以作为手机架,看个电影玩个直播还是很方便。在外面拍个延时摄影、长曝光等对于抖动要求高的东西可以说非常完美了。毕竟谁也不想背个专业器材出去玩。 可分离式的蓝牙遥控器更加拓展了使用场景。合个影不用求人啦,抓拍个什么更是美滋滋。 不满意的是没有采用最新的 type-c 接口,外出时不得不单独考虑数据线的问题。同时使用蓝牙3.0并不支持BLE,续航也需要注意。目前没有找到官方的续航参数。 最后 蟹蟹这位朋友啦 (๑•ᴗ•๑) ❤

心灵鸡汤

  南宋大臣张浚因与奸相秦桧政见不和,被贬往湖南零陵做地方官。

  他出发时,带了几箱书随行,有人诬告他与乱党有关系,结果被高宗检查书信和破旧衣物,高宗叹息道:“想不到张浚贫守到如此地步!”

  很可怜他,于是派人骑快马追上张浚,赏赐他黄金三百两。

列表展示

主站展示位

塞尔维亚滑雪|科帕奥尼克白色世界全指南

欧洲有许多滑雪天堂,但考虑到价格的话,很多天堂就要变成地狱了。除了一个发展中国家——塞尔维亚,总统武契奇,也就是577! 这次滑雪之旅还是有一点波折,主要是网上尤其是小红书上那些所谓「完全攻略」,说好听点是内容空洞,说难听点就是屁话连篇,一句有用的都没有。真希望 Github 能出个权威的旅游攻略集

Android 中的注解处理

基本语法 注解有时候也称为「元编程」,它是对代码本身进行编码,让程序自动生成代码。这种理解有一点狭义,注解不一点要生成代码,也可能只是给其他代码或 IDE 作为参考。例如 @Deprecated 就是很好的例子。 在 java 中,定义注解语法如下: @Retention(RetentionPoli

Go 指针与接口那些事

Go 是传值的 在正式开始讨论指针与接口之前,我们有必要达成共识:Go 中函数传参是传值。 普通参数 普通参数很容易理解,传值就是把原来的值拷贝一份,再传给函数。那么函数拿到的是副本,对齐的修改自然也不会影响原来的值。playground func foo(b int) { b = 007 }

不可描述的东西

千万不要在使用代理时开启带有 p2p 功能的下载器,例如迅雷,不要进行 p2p/BT 下载。 订阅节点说明 订阅地址已分别私聊发送,敬请收藏。这里仅用作帮助文档。 💡节点不能用时请先尝试更新订阅! 默认订阅带有「♻️最低延时」组,会定时对全部节点进行延时测速,自动选择最优的作为主要代理。但往往最低

冬日山城—重庆

前序 朋友要去就一起去咯= ̄ω ̄= 对那地方的火锅也是垂涎已久了。不过看更多的人还是推荐夏天去,什么玩的更多云云。但是像我这种特别特别怕热的,夏天重庆的湿热着实受不了,过去之后怕是窝在宾馆不想出来了。 另外冬季属于淡季,在门票价格和排队体验上都有不少优势。 文中提到的所有商家均是亲自体验后的推荐,无

大学活动的原罪

又是一年运动会,想起大一时的自己,想起现在大一的孩子,感到面对框架的深深无力。 诡异的现状 相信无论你是双一流还是专科,一定遇到过「被」参与活动,「被」当观众之类的事情。若严词拒绝,轻则辅导员谈话被指没有集体荣誉感,重则取消评优资格甚至丢掉学分。一般来说,一个真正成功的活动应该是学生踊跃报名,而如今

Wear OS ADB 应用安装指南

Wear OS 的坑 早在 Android Wear 1.x 时代,智能手表的应用都是先安装在手机上,然后蓝牙连接手表后会同步过去。但在自从升级到 AW2.0 (现改名为 Wear OS)后,这一做法被废弃,改为手表独立安装应用。不过在 Google 的开发者文档中却说依然支持蓝牙同步,着实坑了开发

JS in Android (Google V8)

简介 由于项目动态化的需要,希望在 Android 应用中嵌入脚本语言。常见有 Lua 与 Js。Lua 的集成在之前的文章中已经介绍过。lua 是一个非常轻量的语言,专为嵌入而生,这是他的优势。但因为太轻了,可以说几乎没有标准库,这也使得用起来不是很方便。但目前最大的问题是 lua 脚本无法完美地

关于我

大学狗、单身狗、二线城市、不富、男,可撩 ( ‵▽′)ψ 爱旅游,不跟团的那种。不玩游戏不运动,不打桌游不唱K。游泳是个例外 ミ(・・)ミ (真的不是为了看妹子啊喂!) 只对感兴趣的事可以投入精力。在大学经常独自追寻自己的梦想,不喜欢参与比赛、不喜欢争取荣誉。希望有一天可以通过技术改变生活。 交友不

Tags: spring

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

滚蛋吧腾讯企业邮箱

罪状 腾讯企业邮箱用了快 8 年了,眼看着它变得越来越流氓。 免费用户限制 1 个域名(既然白嫖就不说啥了) 终身限制更换 6 次域名(这又是什么鬼?) 强制绑定微信(微信什么货色就不展开了) 一言不合就扫一扫 更过分!强制创建并绑定企业微信,无论是不是付费用户 腾讯你 TM 除了微信就没有别的产品

HTTP 基础/连接/授权

基础 请求方法 请求方法 Body 幂等 GET 获取资源 Y POST 增加或修改资源 Y PUT 修改资源 Y Y DELETE 删除资源 Y HEAD 同 GET;响应报文没有 Body 响应报文也没有 Y 状态码

用cocos2d-js制作WearOS表盘

这只是一次实验 众所周知,cocos2d 属于游戏引擎,本身就不适合运行在手表,而直接把他当做表盘当然就更不合适了。这里只是一个突发奇想,借助 cocos 强大的渲染与跨平台特性,看看能否做出一款表盘。 要做到这一步需要解决两个问题: 将 cocos 编译到 Android. 将容器由 Activi

Tags: mac

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

OpenWrt 开启 IPv6 公网访问全指南

阅读本文要求具有基础网络知识,例如知道什么是网络掩码、路由、DHCP 等。 当前环境: 江苏电信,光猫为桥接模式。 x86 软路由,安装 iStoreOS。 基础概念 什么是 IPv6 IPv6 与 v4 不同。v4 时代运营商一般只给用户分配最多 1 个公网 ip,然后用户自己的路由器通过 NAT

Tags: server

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

Z-Library: 加入书籍的乌托邦

简介 Z-Library 旨在让每一个人平等地获得书籍。当然,无论多么高端的口号都掩盖不了法律角度上盗版和侵权的事实。不过法律是矛盾调和的产物,它只能解决很小的一部分问题。从某种程度上,Z-Library 满足了我对互联网乌托邦的幻想。因此决定写下这个文章,帮助更多人轻松使用它。 对普通人来讲,只需

LEDE 配置 IPv6 以及公网访问

偶然发现江苏电信宽带已经分配了 IPv6 pd 前缀,一不做二不休搞一下。 基础概念 IPv6 与 v4 不同。v4 时代运营商一般只给用户分配1个公网 ip,然后用户自己的路由器通过 NAT 再给局域网设备分配内网 IP,也就是 192.168.x.x 这种。这种情况下内网设备没有独立的公网 IP

Articles in the category of 写代码的日子

分类的描述

博客寄语:

    相信开放的力量 | Believe in OPENNESS

实时播报:

博客号-学习成长

相信每一分耕耘都有每一分收获,致力帮助博客主所创作的博客能更快的被收录! 如果有其它需求,可联系下方邮箱。