我有mainActivity类和class1。在class1我有这样的东西
public void ownedAdd(int a)
{
owned = owned +a;
}
简单。但是当我想在MainActivity中调用这个方法时
Class1 obj1 = new Class1();
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
obj1.ownedAdd(10);
}
});
在这个地方我几乎没有问题。 Android Studio说obj1需要声明为final。我不喜欢那样。我想要做的是在main方法中使用class1对象。那可能吗?我想制作一些class1的对象,每个对象都有一些变量作为价格,拥有等等,我不知道如何。如有任何帮助,非常感谢;)
答案 0 :(得分:0)
在JAVA中,除非变量在方法中声明为final,或者变量本身是父类的全局变量,否则在JAVA中无法访问方法中的变量到该方法中的匿名类。
要解决您的问题,请将obj1
变量设置为全局变量。类似的东西:
public class MainActivity extends AppCompatActivity {
//Declare the obj1 object here
Class1 obj1;
@Override
public void onCreate(Bundle savedInstanceState) {
//inflate layout and do other stuff
//from where you posted
obj1 = new Class1();
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
obj1.ownedAdd(10);
}
});
}
}
答案 1 :(得分:0)
根据给定的代码,除了点击监听器之外,您不需要引用Class1
实例,因此您可以简单地将其作为View.OnClickListener
的成员变量:
button1.setOnClickListener(new View.OnClickListener() {
final Class1 obj1 = new Class1();
@Override
public void onClick(View v) {
obj1.ownedAdd(10);
}
});
(虽然仍然值得最终决定)。
但是,它不是那么有用,因为只有点击监听器才能访问该实例 - 例如,您无法在另一个控件中显示该值。最简单的方法是制作当前的局部变量final
。