如何使用onClick将函数从一个文件类调用到另一个文件?

时间:2014-05-29 15:29:08

标签: java android

这可能是重复的,但我找不到任何相关内容,所以这里就是这样。

我想通过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(){}

3 个答案:

答案 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)。你确定你不想使用活动吗?