kotlin
文章平均质量分 54
张雨zy
这个作者很懒,什么都没留下…
展开
-
Android TabLayout的简单用法
【代码】Android TabLayout的简单用法。原创 2024-07-23 11:29:08 · 457 阅读 · 0 评论 -
Android 设置drawableTop无效的问题
无效代码 //设置顶部图标 val drawable = resources.getDrawable(align.resId) setCompoundDrawables(null, drawable, null, null)有效代码AppCompatResources.getDrawable获取资源图片需要设置setBounds val drawable = AppCo原创 2021-11-14 09:10:53 · 2098 阅读 · 0 评论 -
Android Kotlin 数据类 data class 的相关总结
data class 是什么?kotlin中用于存储数据的类data class User(val name: String, val age: Int)data class 的特点优势自动生成重写以下方法:equals()/hashCode()toString() 例如 User(name=John, age=42)componentN() 来获取对应属性copy() 功能限制构造函数至少需要一个参数构造函数参数需要标记var或val数据类不能是抽象的,开放的,密原创 2021-04-08 19:31:49 · 2638 阅读 · 0 评论 -
Android 深拷贝(Deep Clone)和浅拷贝(Shadow Clone)相关总结
区别深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型浅拷贝(Shadow Clone)浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝(Deep Clone)深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。深拷贝实现方式(4种)序列化然后反序列化对象后,得到一个新对象手动创建新对象,遇到对象和数组时,手动创建新对象并将其赋值,手动创建新数组并遍历赋值重写 kotlin data class c原创 2021-04-08 18:39:42 · 2884 阅读 · 0 评论 -
Kotlin和Java互调空指针相关的问题(两种可能NullPointerException的情况)
情况一Java调用Kotlin时,如果强制传入一个空值,则会抛出空指针异常Java代码public class MyTest { @Test public void test(){ Mete.getAll(null); }}kotlin代码object Mete { @JvmStatic fun getAll(id: String) { println("getAll: $id") }}J原创 2021-03-16 12:58:26 · 1054 阅读 · 1 评论 -
Android Service+协程的简单用法
Service+协程Android 8.0 以上不推荐使用IntentService了,Google推荐使用JobIntentService由于线程的不好控制,可以使用协程来代替启动协程job = GlobalScope.launch停止协程job?.cancel()class MyService : Service() { companion object { private const val TAG = "MyService" var s原创 2021-03-10 16:22:08 · 3730 阅读 · 0 评论 -
Android Gradle Kotlin DSL,使用Kotlin来构建Gradle
参考资料gradle/kotlin-dsl-docsgradle官网用Kotlin写Android Gradle脚本原创 2021-02-15 11:53:58 · 1918 阅读 · 0 评论 -
Android组件化路由,ARouter框架在Kotlin中的用法(跨模块跳转、登录拦截、错误重定向)
GitHubhttps://github.com/alibaba/ARouter导入添加依赖id 'kotlin-kapt'android { defaultConfig { ... kapt { arguments { //根据模块名来命名路由根节点 arg("AROUTER_MODULE_NAME", project.getName()) //生成原创 2021-02-11 18:41:47 · 3734 阅读 · 4 评论 -
Android 在低层模块中获取app模块下类的实例(高阶函数、接口)
例如一个转跳服务(在app模块下实现,需要在其他模块调用)在最底层Base模块中顶一个跳转服务的接口,里面定义两个方法interface IIProvider { fun startLoginActivity(from: String) fun startMainActivity(from: String) }在app模块下实现这个实例,并实现其两个页面跳转的接口class JumpProvider : IIProvider { overri原创 2021-02-11 17:56:26 · 695 阅读 · 0 评论 -
Kotlin中的高阶函数的使用
变量的类型为一个函数,并关心其返回值class FunctionTest { @Test fun test() { application() println(ABTest.isNewVip.invoke()) } private fun application() { ABTest.isNewVip = { println("application") true .原创 2021-02-07 18:03:46 · 335 阅读 · 0 评论 -
Kotlin中的扩展函数(静态分派)
扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改举例1对Context进行扩展showToast方法,可以在Fragment、Activity、Application中弹出Toast,showToast的定义可以写在任何文件中//扩展函数可以定义在任意文件中fun Context.showToast(msg: String) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()}调用showToastc原创 2021-02-07 16:40:09 · 1364 阅读 · 0 评论 -
Kotlin的空安全机制
空指针尝试调用空对象的成员变量或方法会触发空指针异常(NullPointerException)空安全(避免出现空指针异常)Kotlin两种方式实现空安全1.每次引用对象的时候,都去进行对象判空,在运行期避免对象空指针2.通过静态代码检查,编译插件检查,在编译期避免空指针异常编译期判空Java中编译时的空判断可以通过@NotNull和@Nullable来实现,例如@NonNull的注解就可以标记变量非空,然后IDE会帮助检查,但是是可选的,Kotlin中是强制区分两种类型,并且原创 2021-02-07 13:59:19 · 819 阅读 · 2 评论 -
Android Kotlin WebView和Js交互(Android调用JS、JS调用Android)
Android WebView和Js交互原创 2021-02-04 19:39:30 · 1563 阅读 · 1 评论 -
Kotlin真泛型原理,重载类的构造方法实现类的真泛型
Kotlin泛型可以用where来限定泛型的类型class GenericTest { @Test fun test() { MyTest<A>().add(A()) }}class A : CallBack, Runnable { override fun callBack() { println("callBack") } override fun run() { printl原创 2021-01-31 00:13:23 · 650 阅读 · 0 评论 -
Kotlin协程的简单用法(GlobalScope、lifecycleScope、viewModelScope)
协程(Coroutine)GlobalScope(不推荐)GlobalScope.launch使用的是DefaultDispatcher,会自动切换到后台线程,不能做UI操作 GlobalScope.launch { //GlobalScope开启协程:DefaultDispatcher-worker-1 Log.d(TAG, "GlobalScope开启协程:" + Thread.currentThread().name) //子线程中原创 2021-01-27 16:22:52 · 29048 阅读 · 8 评论 -
Android Retrofit的封装(日志、Header、返回、缓存的统一处理)
封装点网络Log设置(OKHTTP拦截器)url统一追加参数(OKHTTP拦截器)header统一追加参数(OKHTTP拦截器)body统一追加参数(OKHTTP拦截器)错误处理,无网络(OKHTTP拦截器)错误处理,统一错误处理(flog/error)返回值统一剥离外层包装缓存设置超时错误重连机制不同的BaseUrl使用不同的Retrofit实例,同一个BaseUrl下使用同一个Retrofit实例所有Retrofit实例公用一个OkhttpClient实例网络Log设置.原创 2021-01-24 14:46:39 · 3752 阅读 · 2 评论 -
Android ViewPager2自定义页面切换动画
ViewPager2默认切换动画ViewPager2原创 2021-01-17 17:03:10 · 3777 阅读 · 0 评论 -
Android在RecyclerView中使用BaseQuickAdapter实现加载更多
1.Adapter接口实现LoadMoreModule接口package maka.components.myheaderfooterimport android.widget.TextViewimport android.widget.Toastimport com.chad.library.adapter.base.BaseQuickAdapterimport com.chad.library.adapter.base.module.LoadMoreModuleimport com.ch.原创 2021-01-15 19:10:06 · 7483 阅读 · 2 评论 -
Android在TextView中设置局部文字的样式(富文本)(HTML和SpannableString两种方式)
HTML private fun setTextStyleWithHtml(tvTest: TextView) { val text = "Html,测试<u>下划线</u>、<i>斜体字</i>、<font color='red'>红色字</font>的格式" tvTest.text = Html.fromHtml(text) }SpannableStringSpanned.S.原创 2021-01-14 13:14:55 · 1550 阅读 · 1 评论 -
Android为RecyclerView设置header和footer(RecyclerView.Adapter和BaseQuickAdapter两种方式)
RecyclerView.Adapter的方式 private fun initView() { val list = arrayListOf<String>() repeat(9) { list.add(it.toString()) } binding.rvList.adapter = MyAdapter(list) binding.rvList.layoutManager = L.原创 2021-01-12 15:36:50 · 2228 阅读 · 0 评论 -
Android动态设置RecyclerView中Item的间距(使用ItemDecoration)
WorkAdapter.ktclass WorkAdapter : BaseQuickAdapter<Work, BaseViewHolder>(R.layout.store_mine_recycler_item) { override fun convert(holder: BaseViewHolder, item: Work) { val iv = holder.getView<ImageView>(R.id.iv_thumb) Gli.原创 2021-01-07 18:17:20 · 2752 阅读 · 0 评论 -
Android TabLayout+ViewPager2的简单用法(两个Android自带的控件)
效果图1效果图2MainActivityclass MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUti原创 2021-01-03 17:36:07 · 12116 阅读 · 2 评论 -
Android kotlin+协程+Room数据库的简单使用
RoomRoom是Google为了简化旧版的SQLite操作专门提供的1.拥有了SQLite的所有操作功能2.使用简单(类似于Retrofit),通过注解的方式实现相关功能。编译时自动生成实现类impl3.LiveData,LifeCycle,Paging天然融合,支持...原创 2021-01-02 20:36:52 · 4514 阅读 · 4 评论 -
Android使用DataBinding设置Visibility属性
Activitybinding.isLogin = UserManager.isLogin()通过binding将isLogin的值设置到xml中 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.store_activity_ab原创 2020-12-30 17:31:37 · 6516 阅读 · 0 评论 -
Android在Kotlin中通过@Parcelize注解实现Parcelable序列化接口
引入plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' id 'kotlin-kapt'}android { ... androidExtensions { experimental = true } ... ... compileOptions { sourceCom原创 2020-12-23 20:26:16 · 2693 阅读 · 0 评论 -
Android MVVM架构Demo(kotlin+databinding+livedata+lifecycle+协程+retrofit)
MVVM优势主要解决的问题:解决了生命周期问题导致的内存解决了mvp中的大量接口MVVM的分层View层就是展示数据的,以及接收到用户的操作传递给viewModel层,通过dataBinding实现数据与view的单向绑定或双向绑定Model层最重要的作用就是获取数据。(由于使用了协程所以不需要通过接口回调数据)ViewModel 层通过调用model层获取数据,以及业务逻辑的处理。MVVM中 viewModel 和MVP中的presenter 的作用类似 ,只不过是通过 datab.原创 2020-12-04 11:08:23 · 2097 阅读 · 0 评论 -
Kotlin 集合操作符(元素操作符、顺序操作符、映射操作符、生产操作符、统计操作符、自定义操作符)
Kotlin学习总结集合操作符介绍contains(元素) : 检查集合中是否包含指定的元素,若存在则返回true,反之返回falseelementAt(index) : 获取对应下标的元素。若下标越界,会抛出IndexOutOfBoundsException(下标越界)异常,同get(index)一样elementAtOrElse(index,{...}) : 获取对应下标的元素。若下标越界,返回默认值,此默认值就是你传入的下标的运算值elementAtOrNull(index) : 获取.原创 2020-09-26 18:29:35 · 894 阅读 · 0 评论 -
Kotlin 中的特殊类,data数据类、enum枚举类、sealed密封类
Kotlin学习总结数据类数据类默认特性public final 不能被继承自动重写了以下方法getter/settertoStringhashCodeequalscopydata class User(var id: Int, var name: String)枚举类,同java中一致enum class Type{ video, audio, photo}密闭类,比枚举类强大,常用密封类在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受.原创 2020-09-14 12:20:19 · 515 阅读 · 1 评论 -
Kotlin 中的循环和遍历常用写法
Kotlin学习总结循环的5中写法fun main() { //1,2,3,4,5,6,7,8,9,10, for (i in 1..10) { myprint(i) } println() //1,2,3,4,5,6,7,8,9, for (i in 1 until 10) { myprint(i) } println() //10,9,8,7,6,5,4,3,2,1, for (i i.原创 2020-09-11 09:49:04 · 1506 阅读 · 0 评论 -
Kotlin 作用域函数let、run、also、apply、with、takeIf、takeUnless
首先定义一个data数据类型,java中的bean对象data class User(var id: Int, var name: String)fun main() {test1()test2()test3()}fun test1() { val user = User(1001, "zhangyu") //let与run //都会返回闭包的执行结果 //区别在于let有闭包参数,run没有闭包参数 val letResult = user.le原创 2020-09-09 14:19:20 · 405 阅读 · 0 评论 -
Kotlin 与 Java 代码的互调、一些冲突、常见问题
java调用kotlin方法//Main.java 调用kotlin方法public class Main { public static void main(String[] args) { TestKt.echo("hello kotlin"); // 打印结果————kotlin中的方法,hello kotlin }}//Test.kt 其中的函数和变量都会编译成 “pulic static” 的方法和变量fun echo(name: String) {.原创 2020-09-09 09:42:20 · 1050 阅读 · 0 评论 -
Kotlin 可变变量var、不可变变量val、常量修饰const
可变变量var,不可变变量valval 不是常量,是一个不可变变量,因为var与val最本质的区别是val不能有setter方法var age: Int = 10val name: String = "zhangyu" //不可变变量var name1: String = "zy"var name2: String? = null //类型String后面加上?表示可以为nullfun main() { //name1 = name2!! //name2可以为null,所以不能直接.原创 2020-09-08 09:48:11 · 828 阅读 · 0 评论 -
Kotlin相关总结,目录
Kotlin简介原创 2020-09-09 09:47:53 · 207 阅读 · 0 评论