MainActivity.this和this有什么区别

时间:2019-06-04 11:35:27

标签: android

当我在 MainActivity 中键入这样的代码时:-

Button btn=(Button) findViewById(R.id.mainButton1);
btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View p1)
    {
        Toast.makeText(this,"Some text...",Toast.LENGTH_SHORT).show();
    }
});

显示错误

  

没有适用的方法   '(com.example.MainActivity。(匿名),java.lang.String,int)'

但是

Button btn=(Button) findViewById(R.id.mainButton1);
btn.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View p1)
    {
        Toast.makeText(MainActivity.this,"Some text...",Toast.LENGTH_SHORT).show();
    }
});

这没有显示错误, MainActivity.thisthis

中的区别也是如此

1 个答案:

答案 0 :(得分:3)

执行此操作时:

Button btn=(Button) findViewById(R.id.mainButton1);
btn.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View p1)
    {
        Toast.makeText(MainActivity.this,"Some text...",Toast.LENGTH_SHORT).show();
    }
 });

您正在使用接口OnClickListener的实现创建匿名类

现在,当您在this中使用onClick()键盘输入时,此处的this是指创建的匿名类的实例(尽管您也可以访问MainActivity的实例),因此,要引用MainActivity的实例,必须使用MainActivity.this