【发布时间】:2014-07-17 18:19:57
【问题描述】:
我试图从自定义 onClickListener 对象调用留在我的 MainActivity 类中的方法。而且变量作用域有问题。
所以在我的 MainActivity 我有:
Button resetButton = (Button) findViewById(R.id.ResetButton);
View.OnClickListener myListener = new MyListener(GameBoard, width);
resetButton.setOnClickListener(myListener);
这就是我的 myListener 类的样子:
public class MyListener implements View.OnClickListener
{
private static MainActivity mainActivity;
public MyListener(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
public void onClick(View v) {
mainActivity.myMethod();
}
}
以及 MainActivity 中使用一些 MainActivity 实例变量的方法:
public void myMethod()
{
InstanceVariable++; // for example
}
然后,当我通过单击 resetButton 在传递给 myListener 构造函数的 mainActivity 对象上调用 myMethod 时,我收到有关 MainActivity InstanceVariable 范围的错误消息。我是android编程的初学者,所以我不能完全理解它的来源。
当我将这个InstanceVariable 传递给constructor 的myListener object 时,这个错误就会消失。我认为应该有一种更简单的方法来做到这一点。
【问题讨论】:
-
这样的静态上下文会导致巨大的内存泄漏
-
为什么不呢,在你的listner类中,女巫我想是你的MainActivity的一个内部类,调用这样的方法:MainActivity.this.myMethod();
-
@GabeSechan 请您解释一下。我只是对上下文到底是什么感到困惑。
-
上下文是一个活动或服务。如果你保留一个静态引用,垃圾收集器将无法释放它。这意味着它将无法释放它引用的任何内容。这几乎意味着您的活动中的任何变量都不会被释放。