Android Studio:this与(Activity).this 区别与探究

在实际开发中,Context意味着上下文,而Context也在很多方法的参数等地方出现,例如跳转新的Activity使用Intent意图时

Intent intent=new Intent(Lindd.this,MainActivity8.class);

但其实会发现,有时它可以写成

Intent intent=new Intent(this,MainActivity8.class);

而有的情况,写this又会出现错误,例如:

报错 Cannot resolve method 'makeText(anonymous android.view.View.OnClickListener, java.lang.String, int)'

那么this与Activity.this 的区别是什么,值得思考

首先this是Javase中的中的一个知识点,看一下this的官方解释:它是对类的当前实例的引用。

再通过一些查询可以得到这个问题的结果:两者的区别主要是Activity.this指向的总是所在的activity的class,而this 在不同上下文的时候会指向不同,和js的this有些相似,比如在button的onclick方法中直接写this的话替代的就是Button类的上下文(Context)了。

可能比较难以理解,我创建了一个Activity,分别在Activity的onCreate方法中(即以进入Activity就执行)以及findViewById找到按钮并直接通过匿名内部类的方法绑定点击事件:

(xml中就放了一个id为button的按钮就不展示xml代码)

public class MainActivity55 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main55);
 
        //this
        Toast.makeText(this,"123",Toast.LENGTH_SHORT).show();
        Log.i("Main55","this:"+this.toString());
        //com.example.student.MainActivity55@6a47030
        Log.i("Main55","Activity55.this:"+MainActivity55.this.toString());
        //com.example.student.MainActivity55@6a47030
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            //匿名内部类
            @Override
            public void onClick(View v) {
                Log.i("Main55btn","this:"+this.toString());
                //com.example.student.MainActivity55$1@417ec25
                Log.i("Main55btn","Activity55.this:"+MainActivity55.this.toString());
                //com.example.student.MainActivity55@6a47030
                Log.i("Main55btn","btnThis:"+findViewById(R.id.button).getContext());
                //com.example.student.MainActivity55@6a47030
                Toast.makeText(MainActivity55.this,"123",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 会发现一个结论在匿名内部类之外的地方,显然证明了前面标红的结论

this与Activity.this引用的是相同的

而在匿名内部类中两者是不同的,Activity.this不用赘述,而this和findViewById(R.id.button).getContext()是相同的。

那么在实际开发中,上下文全是写为Activity.this则会减少报错的机会

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林要一直努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值