美文网首页
Android Kotlin& Anko 学习笔记

Android Kotlin& Anko 学习笔记

作者: 菠萝鱼_lc | 来源:发表于2018-05-21 17:27 被阅读0次

    属性的都有隐世的set get方法
    如果需要在赋值时加入逻辑判断的时候才需要复写
    注意,复写时,变量名称要用filed代替,避免递归死循环

    空指针安全

    在Kotlin里,可以用“?”表示可以为空,也可以用“!!”表示不可以为空。

    空指针安全并不是不需要处理空指针,你需要用“?”声明某个变量是允许空指针的,例如:

    var num:Int?=null

    声明允许为空时,不能使用类型推断,必须声明其数据类型

    空指针虽然安全了,但对空指针的处理还是要视情况而定,有时候不处理,有时候做数据检查,有时候还需要抛出异常,这三种情况可以这样写:

    val v1 =num?.toInt() //不做处理返回 null 推荐使用这种,减少代码崩溃率,但是尽量不要把变量准许为空,这样,如果哪个地方误传空进去,编译时会有non-null提示
    
    val v2 =num?.toInt() ?:0 //判断为空时返回0
    
    val v3 =num!!.toInt() //抛出空指针异常(用“!!”表示不能为空)
    
    
    

    Anko如何跳转:

    
    startActivity(intentFor<FjrWebActivity>(WebConstant.KEY_WEBINFO_URL to "https://www.baidu.com"))
    
    接收参数:
    webUrl = intent.extras.getString(WebConstant.KEY_WEBINFO_URL)
    

    lateinit 和 lazy 是 Kotlin 中的两种不同的延迟初始化技术。

    *lateinit 只用于 var,而 lazy 只用于 val
    
    *lateinit不能用在可空的属性上和java的基本类型上
    
    *lateinit可以在任何位置初始化并且可以初始化多次。而lazy在第一次被调用时就被初始化,想要被改变只能重新定义
    
    *lazy 应用于单例模式(if-null-then-init-else-return),而且当且仅当变量被第一次调用的时候,委托方法才会执行。
    
    *lateinit 则用于只能生命周期流程中进行获取或者初始化的变量,比如 Android 的 onCreate()
    
    例如:空间的findviewByid需要在生命周期中执行的时候
    可以提前定义
    private val webInfoTitle: WebInfoTitle by lazy {
        findViewById<WebInfoTitle>(R.id.webinfo_title)
    }
    
    等到在生命周期中时会初始化加执行代码。
    
    Kotlin中很鼓励使用常量语法,增加代码安全性。
    

    kotlin的匿名内部类写法:

          test.setListener(this, object : WebCallbackListener{
                override fun showButton() {
                    Log.d("tt", "show button")
                }
            })
    

    kotlin接口匿名内部类实现写法:

      private val client = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                return true
            }
        }
    
    
    lambda 匿名内部类:
    btn_action2.setOnClickListener { view -> var id:Int = view?.id ?:0 }
    
    

    目前还没有明白object是什么意思。

    java to kotlin语法转换:

    类型转换:

    java : Activity activity = (Activity)mContext;
    kotlin : Activity activity = mContext as Activity
    

    普通的构造方法在kotlin中会优化成

    class WebInfoTitle(private val mContext: Context, attrs: AttributeSet) : RelativeLayout(mContext, attrs) {
        init{
         }
    }
    

    方法调用转换:直接用set后面的字段作为对象赋值

    setText(CharSequence text) -> text 且变量不准许为null
    
    setVisibility(int visibility) -> visibility
    

    相关文章

      网友评论

          本文标题:Android Kotlin& Anko 学习笔记

          本文链接:https://www.haomeiwen.com/subject/diifjftx.html