腾讯六面面经,2024-08-06 Jetpack之DataStore介绍和工具类的封装,字节大牛耗时八个月又一力作

is Float -> setting[floatPreferencesKey(key)] = value

is Boolean -> setting[booleanPreferencesKey(key)] = value

is String -> setting[stringPreferencesKey(key)] = value

else -> throw IllegalArgumentException(“This type can be saved into DataStore”)

}

}

}

/**

  • 获取数据

  • */

suspend inline fun < reified T : Any> get(context: Context, key: String): T {

return when (T::class) {

Int::class -> {

context.dataStore.data.map { setting ->

setting[intPreferencesKey(key)] ?: 0

}.first() as T

}

Long::class -> {

context.dataStore.data.map { setting ->

setting[longPreferencesKey(key)] ?: 0L

}.first() as T

}

Double::class -> {

context.dataStore.data.map { setting ->

setting[doublePreferencesKey(key)] ?:0.0

}.first() as T

}

Float::class -> {

context.dataStore.data.map { setting ->

setting[floatPreferencesKey(key)] ?:0f

}.first() as T

}

Boolean::class -> {

context.dataStore.data.map { setting ->

setting[booleanPreferencesKey(key)]?:false

}.first() as T

}

String::class -> {

context.dataStore.data.map { setting ->

setting[stringPreferencesKey(key)] ?: “”

}.first() as T

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。

人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。

资源持续更新中,欢迎大家一起学习和探讨。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于您的问题,我可以提供以下解决方案: 1. 创建一个自定义视图,并使其可拖动。 2. 在视图之间识别交换。 3. 重绘列表项,以便用户可以看到其新位置。 下面是一些代码片段来帮助您实现这个功能: ```kotlin class DragDropListView(context: Context, attrs: AttributeSet?) : ListView(context, attrs), View.OnDragListener { private var startPosition = 0 private var currentPosition = 0 private var draggedItem: View? = null init { setOnItemLongClickListener { _, _, position, _ -> startPosition = position draggedItem = getChildAt(startPosition - firstVisiblePosition) draggedItem?.startDrag(null, DragShadowBuilder(draggedItem), draggedItem, 0) } } override fun onDrag(view: View, event: DragEvent): Boolean { when (event.action) { DragEvent.ACTION_DRAG_STARTED -> return true DragEvent.ACTION_DRAG_ENTERED -> return true DragEvent.ACTION_DROP -> { currentPosition = pointToPosition(event.x.toInt(), event.y.toInt()) swapItems(startPosition, currentPosition) return true } DragEvent.ACTION_DRAG_ENDED -> { redrawList() return true} } return false } private fun swapItems(index1: Int, index2: Int) { val adapter = adapter as SimpleAdapter val item1 = adapter.getItem(index1) val item2 = adapter.getItem(index2) adapter.remove(item1) adapter.insert(item1, index2) adapter.remove(item2) adapter.insert(item2, index1) } private fun redrawList() { val firstVisiblePosition = firstVisiblePosition val lastVisiblePosition = lastVisiblePosition adapter = adapter for (i in firstVisiblePosition..lastVisiblePosition) { getChildAt(i - firstVisiblePosition).invalidate() } } } ``` 这是一个自定义ListView类,它实现了拖放的功能。当用户长按项以启动拖放操时,该getItem方法会调用startDrag方法创建ShadowBuilder对象并启动此操。 onChanged方法实现向ListView中插入或交换项目。invalidate()方法在视图之间拆换完成后呈现数据。 希望这可以帮助你实现你的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值