我是一名机器人初学者。
我很难理解为什么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()
方法。显然这是不允许的,但我不明白为什么。
非常感谢任何帮助。
答案 0 :(得分:3)
您需要将this
引用更改为封闭类的引用,即如果您的类名为Main
,请将其更改为Main.this
。
答案 1 :(得分:1)
因为startActivity
是Context
的方法。在第一个示例中,它是从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));
}
}