[英]calling an activity method from custom onClickListener class
i trying to call a method that stays in my MainActivity class from custom onClickListener
object. 我试图从自定义
onClickListener
对象调用保留在MainActivity类中的方法。 And there is something wrong with variable scope. 可变范围存在问题。
so in my MainActivity i have: 所以在我的MainActivity中,我有:
Button resetButton = (Button) findViewById(R.id.ResetButton);
View.OnClickListener myListener = new MyListener(GameBoard, width);
resetButton.setOnClickListener(myListener);
this is what my myListener class look like: 这是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();
}
}
and method also in MainActivity that uses some MainActivity instance variables: 和方法也在MainActivity中使用一些MainActivity实例变量:
public void myMethod()
{
InstanceVariable++; // for example
}
Then when calling that myMethod on mainActivity object that i passing to myListener constructor by clicking resetButton i getting an error something about MainActivity InstanceVariable
scope. 然后,在我通过单击resetButton传递给myListener构造函数的mainActivity对象上调用myMethod时,出现有关MainActivity
InstanceVariable
作用域的错误。 I`m very beginner to android programming, so i cant fully understand where its coming from. 我是android编程的初学者,所以我无法完全理解它的来源。
And this error disappears when i pass this InstanceVariable
to constructor
of myListener object
. 当我将此
InstanceVariable
传递给myListener object
constructor
时,此错误消失。 I think there should be an easier way to do that. 我认为应该有一种更简单的方法。
Change to: 改成:
public void myMethod() {
mainActivity.instanceVariable++; // for example
}
instancevariable is not visible in your MyListener class, you have to point that it ts in the mainActivity object. instancevariable在MyListener类中不可见,您必须指出它在mainActivity对象中。
If your instanceVariable is private, create getter function in mainActivity: 如果您的instanceVariable是私有的,请在mainActivity中创建getter函数:
public void getInstanceVariable() {
return this.instanceVariable
}
and use it this way: 并以这种方式使用它:
public void myMethod() {
mainActivity.setInstanceVariable(mainActivity.getInstanceVariable()+1); // for example
}
make InstanceVariable to 使InstanceVariable符合
public static int InstanceVariable;
and use this 并使用它
@Override
public void onClick(View v) {
MainActivity.InstanceVariable++;
}
don't make methods for function that has less than 8 lines 不要为少于8行的函数创建方法
Try this : 尝试这个 :
Make your listener an inner class of your activity, then : 使您的听众成为您活动的内在类,然后:
class MyListener implements View.OnClickListener {
public MyListener() {
}
@Override
public void onClick(View v) {
MainActivity.this.myMethod();
}
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.