kotlin Context使用详解
在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语法 } } }
补充知识:当你发现kotlin中viewmodel里无法获得context时
你可以继承 AndroidViewModel的方式来获得
以上这篇kotlin Context使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Android Data Binding 在 library module 中遇到错误及解决办法
这篇文章主要介绍了Android Data Binding 在 library module 中遇到错误及解决办法的相关资料,需要的朋友可以参考下2017-03-03Android 几种屏幕间跳转的跳转Intent Bundle
这篇文章主要介绍了Android 几种屏幕间跳转的跳转Intent Bundle,有需要的朋友可以参考一下2013-12-12老生常谈Listview中onItemClick中的各个参数(推荐)
下面小编就为大家带来一篇老生常谈Listview中onItemClick中的各个参数(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-04-04解决webview 第二次调用loadUrl页面不刷新的问题
这篇文章主要介绍了解决webview 第二次调用loadUrl页面不刷新的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03Android RecyclerView四级缓存源码层详细分析
RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法2022-11-11Flutter DateTime获取本月的开始时间与结束时间方法
这篇文章主要为大家介绍了Flutter DateTime获取本月的开始时间与结束时间方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪2023-05-05
最新评论