
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
出现的原因是在项目A中依赖了xiag项目B,他们又有相同的字段,因此出现命名冲突。、解决办法:在AndroidManifest.xml 的 application 下添加命名空间:xmlns:tools="http://schemas.android.com/tools"然后将冲突的名字用tools:replace="android:@@"替换,其中@@就是
Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。为了解决MVC的缺点,MVP 框架被提出来。
我们通过简单模拟网络请求数据,返回值的获取方式:data class Response(var code: Int, var message: String)private fun execute(): Response {println("正在网络请求...")val code = 200val message = "success"return Response(code, message)}
简单来说,CoroutineScope是启动协程的作用域,所有协程都需要在作用域中启动,并且作用域内部创建子协程则会自动传播给子协程;而CoroutineContext则是在协程作用域中执行的线程切换。1、首先我们来看下Scope作用域的理解,示例代码:import kotlinx.coroutines.launchimport kotlinx.coroutines.runBlockingfun
举例一:在java中我们经常会写这样的代码:if (time == null) {time = "上午";}判断一个值是否为空,为空则设置一个默认值。但是在kotlin中可以有简便的写法:time ?: "上午"使用 ?: 的操作符,当time为空时,自动设置默认值即可,而无需判断举例二:if (time == null || time.length < 3) {LogUtils.e(TAG
1、Kotlin中const 修饰的常量Kotlin中const 修饰的常量 - 简书想要实现真正的常量其实不难,方法有两种,一种是const,另一个使用@JvmField注解constconst,顾名思义,就是常量的单词简写,使用它可以声明常量,不过仅限于在top-level和object中。//top-levelconst val name = "Kotlin"//object中class D
开始Kotlin 有个特别好用的功能叫扩展,你可以给已有的类去额外添加函数和属性,而且既不需要改源码也不需要写子类。这就是今天这个视频的主题。另外很多人虽然会用扩展,但只会最基本的使用,比如就只用来写个叫dp 的扩展属性来把 dp 值转成像素值:valFloat.dpget()=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,this,R
效果一:数组的forEach中直接retrunprivate fun test0() {val arr = intArrayOf(1,2,3,4,5,6,7)arr.forEach {if (it == 4) returnLog.d(TAG, "value:$it")}Log.d(TAG, "this is End")}打印结果:可以看到程序程序在遍
一、协程相关1-1、协程使用官网例子(组合挂起函数):https://www.kotlincn.net/docs/reference/coroutines/composing-suspending-functions.html1、顺序调用:suspend fun doSomethingUsefulOne(): Int {delay(1000L)// 假设我们在这里做了一些有用的事return13}
扩展函数扩展类的函数, 即Extension Function, 可以在已有类中添加新的方法, 比继承更加简洁和优雅.扩展View的dp转换函数.// 使用扩展函数fun View.dp_f(dp: Float): Float {// 引用View的contextreturn TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, co







