我试图从自定义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
}
然后在mainActivity对象上调用myMethod时,通过单击resetButton传递给myListener构造函数我得到一个关于MainActivity InstanceVariable
范围的错误。我是android编程的初学者,所以我无法完全理解它的来源。
当我将此InstanceVariable
传递给constructor
myListener object
时,此错误消失了。我认为应该有一种更简单的方法。
答案 0 :(得分:0)
更改为:
public void myMethod() {
mainActivity.instanceVariable++; // for example
}
instancevariable在MyListener类中不可见,您必须在mainActivity对象中指出它。
如果您的instanceVariable是私有的,请在mainActivity中创建getter函数:
public void getInstanceVariable() {
return this.instanceVariable
}
并以这种方式使用它:
public void myMethod() {
mainActivity.setInstanceVariable(mainActivity.getInstanceVariable()+1); // for example
}
答案 1 :(得分:0)
将 InstanceVariable 改为
public static int InstanceVariable;
并使用此
@Override
public void onClick(View v) {
MainActivity.InstanceVariable++;
}
不要制作功能少于 8行的方法
答案 2 :(得分:0)
试试这个:
让你的听众成为你活动的内在类,然后:
class MyListener implements View.OnClickListener {
public MyListener() {
}
@Override
public void onClick(View v) {
MainActivity.this.myMethod();
}
}