kotlin Context使用详解

作者:damnivictory 时间:2021-09-12 02:54:29 

在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使用详解

kotlin Context使用详解

来源:https://blog.csdn.net/damnivictory/article/details/73850555

标签:kotlin,Context
0
投稿

猜你喜欢

  • Springboot+Netty+Websocket实现消息推送实例

    2022-03-24 09:29:29
  • java LRU(Least Recently Used )详解及实例代码

    2022-10-08 10:42:43
  • Java线程的全方位详解

    2023-04-11 14:02:55
  • 老生常谈反射之Class类的使用(必看篇)

    2022-07-20 16:32:30
  • C#窗体传值代码方法

    2022-12-03 22:57:37
  • java struts2学习笔记之线程安全

    2022-08-07 00:13:07
  • spring Boot打包部署到远程服务器的tomcat中

    2023-01-14 21:45:28
  • Android BottomSheet效果的两种实现方式

    2022-10-14 02:26:23
  • Java线程池submit阻塞获取结果的实现原理详解

    2021-08-29 03:55:45
  • Unity实现俄罗斯方块

    2021-05-28 13:37:08
  • 使用Maven配置Spring的方法步骤

    2023-02-05 18:37:46
  • Java中String的JdbcTemplate连接SQLServer数据库的方法

    2022-09-05 00:34:12
  • Java使用JavaMail API发送和接收邮件的代码示例

    2022-09-02 01:15:51
  • Java通过What、Why、How了解弱引用

    2021-11-01 00:06:20
  • Java方法参数传递机制原理解析

    2022-04-16 19:10:46
  • C++/java 继承类的多态详解及实例代码

    2022-11-28 10:22:06
  • 深入Unix时间戳与C# DateTime时间类型互换的详解

    2023-06-04 21:48:11
  • Java实战员工绩效管理系统的实现流程

    2021-11-20 19:04:28
  • Android kotlin使用注解实现防按钮连点功能的示例

    2023-07-02 11:58:06
  • java web学习_浅谈request对象中get和post的差异

    2022-10-28 00:25:20
  • asp之家 软件编程 m.aspxhome.com