3

我以为我对自己正在做的事情有很好的把握,但是每当我觉得自己对某事掌握得很好时,事实证明我错了:)

有问题的代码是这个

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);




mButton = (Button)findViewById(R.id.m_button);
mButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });

    }

我的困惑在于new Intent()andstartActivity方法。

我的假设是,只要我们在一个匿名类View.OnClickListener中工作,我就必须做类似的事情 MainActivity.this.startActivity(intent);

当我不在匿名班级时,我可以简单地做 new Intent(this,SecondActivity.class);

有人可以解释为什么我可以调用该startActivity();方法但不能只this在意图参数中使用吗?

4

2 回答 2

7

在匿名内部类的情况下this是匿名类本身。要从匿名访问外部类this,您需要执行OuterClassName.this.

但是,允许内部类从外部类访问变量和方法。内部类是否匿名并没有什么区别。

看:

我认为内部类可以访问外部类变量/方法?

Java嵌套内部类访问外部类变量

这是静态和非静态内部类之间最重要的区别之一。

如果(例如)你在两个类中都有一个同名的方法,那么你只需要类名,所以它会调用告诉你指的是哪一个。这就是发生的事情this,内部和外部类都有this- 所以它默认为内部类,除非你另有说明。

于 2013-12-22T12:14:59.050 回答
0

从您的内部课程中,您可以使用 newIntent(MainActivity.this, AnotherActivity.class)

因为这是this你的外在活动,而不是内在阶级”this

于 2013-12-22T12:13:43.720 回答