【问题标题】:How "this" keyword actually works inside Intent constructor arguement?“this”关键字实际上如何在 Intent 构造函数参数中起作用?
【发布时间】:2019-07-22 07:17:08
【问题描述】:

Intent contrucotr 的争论需要 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)
    }
}

这里,this 表示 MainActivity 的实例,但如果我使用 MainActivity() 而不是 this 它会给我错误。而thisMainActivity() 在这里是一样的。

【问题讨论】:

    标签: android android-intent kotlin this


    【解决方案1】:

    在 Android 中 ActivityServiceBroadcastReceiverApplication 都扩展了 Context。所以你可以通过它们来代替Context

    您可以看到Activity 类扩展here 的所有类。

    【讨论】:

    • 耶!我理解,但我的问题是,如果 MainActivity 类扩展了 Context 类,那么为什么我们不能在 Intent() 争论中直接使用 MainActivity() 代替“this”。而他们在这里的意思是一样的。
    • 您可以使用MainActivity() 代替它作为Intent() 的第一个参数,IDE 不会显示任何错误,因为它按照Java 语法是正确的。但是,在 Android 中,我们不会手动创建 Activity 的实例,而是传递带有 Activity 详细信息的 Intent 以启动 Android 框架,该框架创建一个活动并调用 onCreate() 和其他生命-在新创建的实例上循环方法。
    • 只是@Saran Sankaran 的补充。你也可以使用:MainActivity.this
    • @sparshgoyal this 是对使用它的实例的引用,因此它不会创建任何新实例。
    • @sparshgoyal 这是 Activity 的实例(或 MainActivity 在您的情况下)。它不是你创建的实例,它是操作系统创建的实例。但你现在不必担心这一点。 MainActivity() 不是您应该通过的东西,您应该通过 thisMainActivity.this 来进行当前活动。希望这能解决您的疑问。 :)
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2016-11-22
    相关资源
    最近更新 更多