软件编程
位置:首页>> 软件编程>> Android编程>> kotlin Context使用详解

kotlin Context使用详解

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

标签: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使用详解

kotlin Context使用详解

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com