美文网首页从零开始学习Kotlin
Kotlin初学(一:OnClickListener)

Kotlin初学(一:OnClickListener)

作者: 我是还没达到3k的菜鸡 | 来源:发表于2019-08-29 18:08 被阅读98次

    Kotlin都出来了好几年,火起来的时候也还没去学,今年想着学习下更好
    对于Android开发来说,代码量精简了很多,extends被 : 代替,implement被 , 代替

    class MainActivity : AppCompatActivity(), View.OnClickListener {
    
    }
    

    其他的一些变化和基本语法,在android项目中边学边看便用
    现在讲讲Kotlin在android开发中OnClickListener的表现
    重写的onClick中,以往java中的switch被when代替

     override fun onClick(v: View?) {
            when (v) {
                
            }
        }
    

    case R.id.xx 被具体控件采用 xx -> 具体事件 代替

    override fun onClick(v: View?) {
            when (v) {
                btn -> toast("点击了按钮")
            }
        }
    

    其中btn的来源

    //var 为变量,val常量,相当于final
    private var btn: Button? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            btn = findViewById(R.id.main_btn)
            main_btn.setOnClickListener(this)
        }
    

    toast采用的是Android增强库:Anko(添加依赖在末文)
    toast包含两个方法:默认的短时长:toast()以及长时长:longToast()
    对于toast函数,它在Anko库中的定义是:

    //短时间显示
    fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    //长时间显示
    fun Context.longToast(message: Int) = Toast.makeText(this, message, Toast.LENGTH_LONG).show()
    

    在java的点击事件中,一个控件的点击监听中,可以处理多个事件,那么在Kotlin中该如何处理多个事件呢?
    直接换行写肯定是不行的,在Kotlin中,控件的点击监听多个事件采用的就是:控件 -> {事件1;事件2}

    override fun onClick(v: View?) {
            when (v) {
                //一个点击监听多个事件,采用 {xx;xx}形式
                //或者{xx
                //     xx}
                //回车键相当于';'
                 btn -> {toast("点击了按钮");title?.text = origin.toInt().toString()}
    //            btn -> {toast("点击了按钮")
    //                title?.text = origin.toInt().toString()}
            }
        }
    

    这个格式很熟悉吧
    最后提出一个疑问:
    既然控件的点击监听采用的是 控件-> 事件,对于同一个控件监听多个事件为什么不能采用如下方法:

    override fun onClick(v: View?) {
            when (v) {
                //一个点击监听多个事件,采用 {xx;xx}形式
                btn -> toast("点击了按钮")
                btn -> title?.text = origin.toInt().toString()
            }
        }
    

    这样的写法只会对第一个事件生效
    求大佬解答

    最后的运行结果图


    Screenshot_1567072479.png Screenshot_1567072483.png

    Anko依赖添加:
    在项目的build.gradle的buildscript{添加Anko}

    buildscript {
        ext.kotlin_version = '1.3.41'
        //Anko版本
        ext.anko_version = "0.9"
        repositories {
            google()
            jcenter()
            
        }
    

    在app的build.gradle的dependencies{添加Anko}

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'androidx.appcompat:appcompat:1.0.2'
        implementation 'androidx.core:core-ktx:1.0.2'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test:runner:1.2.0'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
        //anko库的编译配置
        implementation "org.jetbrains.anko:anko-common:$anko_version"
    }
    

    感谢各位的查看
    在编程的道路越走越远

    相关文章

      网友评论

        本文标题:Kotlin初学(一:OnClickListener)

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