从自定义onClickListener类调用activity方法

时间:2014-05-28 13:32:42

标签: java android class scope

我试图从自定义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时,此错误消失了。我认为应该有一种更简单的方法。

3 个答案:

答案 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();
}

}