kotlin Context使用

本文介绍在Kotlin中如何有效地使用Context,包括在Activity级别及内部类中使用this关键字,通过实例变量引用Context,以及利用Kotlin的标签语法简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在activity级下使用this表示context

kotlin中取消了xxxActivity.this的用法,所以我们可以在activity下新建一个Context属性——instance指向它本身。然后在其他地方使用。如果使用的地方是在activity这一级则可以直接使用this指向它本身

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_share_temp)
        share_imgbtn.setOnClickListener(this)
        share_qq.setOnClickListener(this)
        share_wechat.setOnClickListener(this)
        share_sms.setOnClickListener(this)
    }

在内部类里面是用外部类的实例对象表示context

如果是在内部类里面使用,则可以为activity写一个实例,然后在内部类里面使用

class ShareTempActivity : AppCompatActivity(), View.OnClickListener {
    val instance by lazy { this } //这里使用了委托,表示只有使用到instance才会执行该段代码
    val TAG:String = "ShareTempActivity"
    override fun onClick(v: View?) {
        //TODO("to do something") To change body of created functions use File | Settings | File Templates.
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_share_temp)
        share_imgbtn.setOnClickListener(instance)
        share_qq.setOnClickListener(instance)
        share_wechat.setOnClickListener(instance)
        share_sms.setOnClickListener(instance)
    }

    inner class MainShareBoardListener : ShareBoardlistener{
        override fun onclick(p0: SnsPlatform?, p1: SHARE_MEDIA?) {
            //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            Log.i(TAG,p1.toString())
            Toast.makeText(instance,"",Toast.LENGTH_SHORT).show()//传递实例
        }
    }
}

使用kotlin的标签语法从内部类使用外部类的实例表示context

还可以使用kotlin的标签,高级语法使用,在内部类里面或者当前activity的上下文

class ShareTempActivity : AppCompatActivity(), View.OnClickListener {
    val instance by lazy { this }
    val TAG:String = "ShareTempActivity"
    override fun onClick(v: View?) {
        //TODO("to do something") To change body of created functions use File | Settings | File Templates.
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_share_temp)
        share_imgbtn.setOnClickListener(instance)
        share_qq.setOnClickListener(instance)
        share_wechat.setOnClickListener(instance)
        share_sms.setOnClickListener(instance)
    }

    inner class MainShareBoardListener : ShareBoardlistener{
        override fun onclick(p0: SnsPlatform?, p1: SHARE_MEDIA?) {
            //TODO("not implemented") 
            Log.i(TAG,p1.toString())
            Toast.makeText(this@ShareTempActivity,"",Toast.LENGTH_SHORT).show()//kotlin语法
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值