传递给意图构造函数时,this
和ActivityClass.this
之间有什么区别
例如给定2个活动:ActivityOne和ActivityTwo
以下不起作用(编译错误)
@Override
public void onClick(View v) {
Intent intent = null;
Log.i(TAG, this.toString());
Log.i(TAG, ActivityOne.this.toString());
intent = new Intent(this, ActivityTwo.class);
startActivity(intent);
}
虽然这有效
@Override
public void onClick(View v) {
Intent intent = null;
Log.i(TAG, this.toString());
Log.i(TAG, ActivityOne.this.toString());
intent = new Intent(ActivityOnethis, ActivityTwo.class);
startActivity(intent);
}
日志中的日志信息是
activitylab.ActivityOne$1@41fc5818
activitylab.ActivityOne@41fa2948
虽然它们不同,但传递活动的常见答案通常是使用this
,我不是为什么我遇到这个问题
答案 0 :(得分:7)
我假设您的onClick
方法位于匿名类实例中(尽管您没有包含完整代码,但在打印ActivityOne$1
时看到的this
输出是如何显示匿名内部类),因此这指的是匿名内部类实例,而不是包含此实例的ActivityOne
实例。
ActivityOne.this
返回对包含ActivityOne
实例的引用,这是您应该传递给Intent
构造函数的内容。
答案 1 :(得分:1)
这是基本的Java,已回答here。
回顾一下,如果一个类的实例在裸Class.this
不可见时,可以使用this
来引用该类的实例,例如来自内部类。在您的onClick
示例this
中,将引用您正在使用的Listener
的匿名实例,而ActivityOne.this
将引用包含该侦听器的ActivityOne
实例。
答案 2 :(得分:0)
ActivityOne.this ==参考上下文
ActivityTwo.class ==引用类,这是它的类名
this ==它是Current Type,如果你在Thread中,那么它是Thread Type;如果您在活动中,那么它是活动类型;如果您在自定义类中,则它是该特定自定义类的类型
执行此操作时会出现错误,因为您不能在主线程中使用getApplicationContext()
当你使用myActivity.this它知道它将从这个活动的上下文开始。