Android MainActivity.this和this
1. Context和Activity的关系
在很多地方需要用到Context这个类作为参数,我们一个是用 SomeActivity.this传递。在Android Doc发现,Activity是Context的间接子类,Context是Activity的间接基类。那么根据语法,Activity就是一个Context。
2. 类名.this 这种语法在什么情况下会出现呢?
一句话:内部类需要用到外部类的成员变量或方法。
附加说明:如果重名则必须“类名.this”指定那个类的成员变量或方法,如果没有重名则该变量可以指定所属类也可以不指定所属类。
public class Demo {
int n = 100;
public void show(){
A a = new A();
a.foo();
}
// 内部类
class A{
public int n = 200;
void foo(){
System.out.println("Demo::A::foo(): " + n);
// 内部类需要用到外部类的成员或方法
System.out.println("Demo.this.n : " + Demo.this.n);
}
}
}
上面代码中,类A是一个内部类,它想调用外面的n,这里由于n变量在内部类A中 和外部类Demo中重名,所以必须用Demo.this.n来区分调用的是哪一个变量n。
3. SomeActivity.this
1、在内部类里面(实现点击监听一般使用匿名类)
public class MainActivity extends Activity{
// MainActivity 的内部类MyClickListener 表示按钮监听
private class MyClickListener implements OnClickListener{
@Override
public void onClick(View v) {
// 如果这里用this则表示MyClickListener的这个类的对象;该对象并不是Context的子类
// 因此Intent 的第一个参数必须是 该类外部类,需要明确指出
Intent intent = new Intent (MainActivity.this, SomeActivity.class);
startActivity(intent);
}
}
}
Intent intent = new Intent (MainActivity.this, SomeActivity.class);
创建Intent对象时,传入第一个参数是个Context,由于每一个类都有一个成员变量,名叫this。 有重名冲突,此时,在MyClickListener类中写下这行代码,那么 this代表的是当前的内部类,即MyClickListener。
OnClickListener类并不是Context的子类,直接用this会报错。因此这里必须显示指定外部类的那个this,用MainActivity.this指明。
2、在外部调用
把这行代码换个位置,放到MainActivity的onCreate()中去,(在创建的时候,转到其他Activity,看似没什么意义,为了理解有帮助)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent (this, SomeActivity.class);
startActivity(intent);
}
}
看!这里可以直接用this,这个就是代表MainActivity类。
3、外部实现接口
public class MainActivity extends Activity implements View.OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
....
startButton.setOnClickListener(this);
...
}
@Override
public void onClick(View view) {
}
}
Activity 后面 跟了个 implements OnClickListener,然后根据提示,会自动在下面出现一个新的方法 onclick(),是单独的一个方法。
下一篇: java this使用情况
推荐阅读
-
鹿胎膏怎么吃,鹿胎膏有哪些功能和效果!
-
Android自定义View 使用PathMeasure简单模仿系统ProgressBar(四)
-
Android studio中IDE窗口怎么显示或者隐藏?
-
Android studio怎么使用git获取最新内容然后合并?
-
Android Caused by: java.lang.ClassNotFoundException解决办法
-
Android开发之菜单(menu)用法实例分析
-
Android自定义ScrollView实现放大回弹效果实例代码
-
Android编程之ActionBar Tabs用法实例分析
-
Android自定义View圆形进度条控件(三)
-
Android studio中logcat提示信息设置?