在早期的 Android 编程教程第 192 页中,我们看到了 LunchList#onOptionsItemSelected
的实现。在这个实现中,我们看到两个Intent
传递给startActivity
:一个是构造函数传递LunchList.this
,另一个是构造函数传递this
。
有什么区别?
请参阅此处的第 78 - 91 行。请注意如何在内部类中声明onOptionsItemSelected
。
在 Android/Java 中,this
的值是否会在事件处理程序或函数绑定的上下文中通过反射而改变?两个Intent
实例都可以传递this
吗?
在 Java 中,this
是指包含类,ClassName.this
是指名称为 ClassName
的第一个包含类。 事件处理程序通常编写为匿名的内部类,因此如果要引用事件处理程序的包含类(而不是事件处理程序的类),则需要指定ContainingClass.this
,而不是this
。
参考: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4
当您在Inner Class
中创建Intent
时,请使用ClassName.this
(此处className必须是活动类名称),如果在Activity
类中创建Intent
则可以使用this
。
对于此示例,它不会有任何区别,因为在任一条件下,启动活动的类都将保持不变。Intent 的第一个参数是指类的上下文,从中启动活动以及从中传递捆绑包数据。