为什么startActivity在一个方法中工作而在另一个方法中失败?

时间:2010-08-17 14:55:49

标签: android

我是一名机器人初学者。

我很难理解为什么startActivity从我发现的教程中复制时会正常运行,并且当我做出最小的更改时会失败。

教程中的代码:

private class ButtonHandler implements View.OnClickListener {
    public void onClick(View v) {
        handleButtonClick();
    }   
}

private void handleButtonClick() {
    startActivity(new Intent(this, SecondAct.class));
}

有效。当我尝试将其更改为我认为更简单的设计时,我收到了错误。

private class ButtonHandler implements View.OnClickListener {
    public void onClick(View v) {
        startActivity(new Intent(this, SecondAct.class));
    }   
}

错误是:

  

构造函数Intent(FirstTwoApps.ButtonHandler,Class)   未定义

请注意,我所做的只是将操作从handleButtonClick()方法移至onClick()方法。显然这是不允许的,但我不明白为什么。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

您需要将this引用更改为封闭类的引用,即如果您的类名为Main,请将其更改为Main.this

答案 1 :(得分:1)

因为startActivityContext的方法。在第一个示例中,它是从Context对象运行的,第二个是从ButtonHandler对象运行的。这是一个范围问题。

答案 2 :(得分:0)

问题在于, handleButtonClick()存在于您的Activity类中,该类具有上下文引用以通过 this 来启动 startActivity()。< / p>

现在, onClick()存在于ButtonHandler类中,它根本没有上下文作用域。

因此,要从ButtonHandler类获取上下文引用,必须使用 YouarActivity.this 而不是 this

解决方案-

private class ButtonHandler implements View.OnClickListener {
    public void onClick(View v) {
        startActivity(new Intent(YouarActivity.this, SecondAct.class));
    }   
}