这可能是重复的,但我找不到任何相关内容,所以这里就是这样。
我想通过onClick将文件B.java中的一个函数调用到A.java中。问题是,每次添加行都会出错。这是我的代码,我会在底部给出错误。
A.java
import com.example.app.B;
public class MainService extends Service
{
private CallFunc callFunc;
private Button btn;
public void onCreate()
{
callFunc = new CallFunc();
btn = new Button(this);
//Code for setOnClickListener
@Override
public void onClick(View v)
{
callFunc();
}
}
}
B.java
public class CallFunc
{
public CallFunc()
{
//Stuff to do
}
}
我得错误
The method callFunc() is undefined for the type new View.OnClickListener(){}
答案 0 :(得分:1)
//you are not calling your function:
import com.example.app.B;
public class MainService extends Service
{
private CallFunc callFunc;
private Button btn;
public void onCreate()
{
callFunc = new CallFunc();
btn = new Button(this);
//Code for setOnClickListener
@Override
public void onClick(View v)
{
callFunc.callFunc();//It is a good idea to use better method names. it looks like you are calling your constructor, not a method.
}
}
}
答案 1 :(得分:1)
在CallFunc类中,
public CallFunc()
{
//Stuff to do
}
表示它的构造函数。它在您创建时被调用。在这里callFunc = new CallFunc();
。
您可以将它包含在onClick方法中。
@Override
public void onClick(View v)
{
callFunc = new CallFunc();
}
更好的方法是这样做是为CallFunc类添加一个方法,因为方法意味着你做了一些事情。你用那种方法做你的东西。类意味着像汽车这样的物体。车可以开车。所以它应该有dirve()方法。然后car.drive()意味着你开车。 :)
@Override
public void onClick(View v)
{
callFunc.someMethod();
}
答案 2 :(得分:0)
B.java
中的内容是构造函数而不是方法。构造函数是一种特殊情况方法,在创建该类的实例时会调用该方法。它用于正确初始化和填充类的新实例。
你可能想要做的是:
public class CallFunc
{
public CallFunc()
{
// this is the constructor
// initialise the class instance here
}
public void someMethod()
{
// a method you can call
// perform actions here
}
}
然后在您的MainService的onCreate()
中,您应该:
@Override
public void onClick(View v)
{
callFunc.someMethod();
}
但是,当服务没有UI时,您正在扩展服务并使用UI组件(Button和onClick)。你确定你不想使用活动吗?