提问人:sparsh goyal 提问时间:7/22/2019 最后编辑:Shahzain alisparsh goyal 更新时间:7/22/2019 访问量:59
“this”关键字在 Intent 构造函数参数中实际上是如何工作的?
How "this" keyword actually works inside Intent constructor arguement?
问:
Intent constructr 的参数需要 Context 类的对象,但在这段代码中,我传递的是“this”,这意味着 MainActivity 类对象的对象。它是如何工作的?因为它需要 Context Class 实例,但我正在传递 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)
}
}
在这里,表示 MainActivity 的实例,但如果我使用代替它,就会出错。而 和 在这里是一回事。this
MainActivity()
this
this
MainActivity()
答:
2赞
Saran Sankaran
7/22/2019
#1
在 Android 中,、、、、因此,您可以传递它们来代替 .Activity
Service
BroadcastReceiver
Application
Context
Context
您可以在此处查看类扩展的所有类。Activity
评论
0赞
sparsh goyal
7/22/2019
你!我明白,但我的问题是,如果 MainActivity 类扩展了 Context 类,那么为什么我们不能在 Intent() 参数中直接使用 MainActivity() 代替“this”。而它们在这里的意思都是一样的。
0赞
Saran Sankaran
7/22/2019
您可以使用它作为第一个参数,IDE 不会显示任何错误,因为它按照 Java 语法是正确的。但是,在 Android 中,我们不会手动创建实例,而是将包含 to start 详细信息的 Intent 传递给 Android 框架工作,该框架工作会在新创建的实例上创建 Activity 和调用以及其他生命周期方法。MainActivity()
Intent()
Activity
Activity
onCreate()
0赞
Alpha-Centauri
7/22/2019
只是@Saran Sankaran的补充。您还可以使用:MainActivity.this
0赞
Joffrey
7/22/2019
@sparshgoyal是对使用它的实例的引用,因此它不会创建任何新实例。this
0赞
Saran Sankaran
7/22/2019
@sparshgoyal这是活动的实例(或者在您的情况下)。它不是由您创建的实例,而是由操作系统创建的实例。但你现在不必担心。 不是你应该通过的东西,你应该通过,或者是为了你当前的活动。希望这能解决您的疑问。:)MainActivity
MainActivity()
this
MainActivity.this
评论