android - “this”关键字实际上是如何在 Intent 构造函数争论中起作用的?
问题描述
Intent contrucotr 的论点需要 Context 类的对象,但在这段代码中,我正在传递“this”,这意味着 MainActivity 类对象的对象。这个怎么运作?因为它需要上下文类实例,但我正在传递 MainActivity 的实例。
const val EXTRA_MESSAGE = "com.example.myfirstApp.MESSAGE"
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun sendMessage(view: View){
val editText = findViewById<EditText>(R.id.editText)
val message = editText.text.toString()
val intent =Intent(this,DisplayMessageActivity::class.java).apply{
// if I use MainActivity() instead of this , gives me error
putExtra(EXTRA_MESSAGE, message)
}
startActivity(intent)
}
}
在这里,this
表示 MainActivity 的实例,但如果我使用它MainActivity()
而不是this
它会给我错误。而this
和MainActivity()
在这里是一样的。
解决方案
在 AndroidActivity
中,Service
, BroadcastReceiver
,Application
都扩展了Context
. 所以你可以通过它们来代替Context
.
你可以在这里看到一个Activity
类扩展的所有类。
推荐阅读
- c# - 为什么我的代码在代码中使用 MessageBox.Show() 工作而没有它就无法工作?
- mysql - 从数据库.net core 2中选择特定行
- c++ - SFML UdpSockets 没有发送/接收没有错误?
- r - 在 R 中是否使用引号分配 NA
- mysql - 错误:命令 '/bin/sh 返回一个非零代码:1
- listview - JavaFX ListView//单选按钮 setSelected() 不起作用
- reactjs - GraphQL 可以查询第三方 API 吗?
- javascript - 如何使用纯 javascript 过滤/解析 html 模板字符串?
- typescript - Stenciljs 自定义事件未通过 @Listen 响应
- javascript - 带有 CSS 推子的 ng-show 不起作用