Android:OOP |在其他文件中使用函数

时间:2011-06-06 20:39:02

标签: java android oop

我对Android很陌生,但我有一些经验(并且有点生疏)Java和OOP。

基本上我的应用程序所做的是当你按下按钮时,led或“图像”会闪烁。

我正在尝试将我的项目划分为多个文件,我可以导入一个java文件来使用该类的函数,但我不确定如何做到这一点......

我有两个文件。 1)HelloFormStuff.java(这与主要的一样),以及2)led_functions.java

在HelloFormStuff中我放了:

import com.example.helloformstuff.led_functions
// com.example.helloformstuff is the package

代码示例.. HelloFormStuff.java

    public class HelloFormStuff extends Activity {

/* Called when the activity is first created. */
@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button btn1 = (Button) findViewById(R.id.btn1);
    btn1.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks
            currentMode.setText("Button 1 Pressed");
            led_circleBusy();
           }
    });
}

}

在led_functions.java ......

public class led_functions extends Activity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final ImageView LED_1;
    LED_1 = (ImageView)findViewById(R.id.LED_1);

   @Override 
    public void led_circleBusy()
    {
        LED_1.setVisibility(View.INVISIBLE);

    }

}

我得到的错误是:方法led_circleBusy()未定义类型new View.OnClickListener(){}

所以我问的是如何从其他文件中实现我的其他功能。

感谢。

-Paul

PS:我一直在看示例代码,如果你想知道为什么我把它放在不需要它的“@Override”之类的地方,那就忽略它..我一直在尝试随意的东西:l

5 个答案:

答案 0 :(得分:2)

好吧,看起来你不得不回去学习:

  1. 的Java / OOP
  2. Android应用生命周期

    1. 的Java / OOP
  3. 在Java中,您无法像在onCreate()中使用led_circleBusy()那样在另一个方法中定义方法。您的led_functions类无法按原样编译。

    然后,您必须声明您的led_circleBusy()以便使用led_functions.led_circleBusy()从任何地方调用它,或者在调用led_circleBusy()之前创建一个新的led_functions实例(new led_functions())。 / p>

    1. Android应用程序生命周期
    2. Android应用程序中的活动可以被视为“屏幕”。 2活动只能通过Intents进行通信。对一个活动中的视图的操作只能通过将活动A中的意图传递给活动B来修改第二个活动上的视图。

      如果你的组件在同一个屏幕上,那么你不应该有2个子类的Activity,而只有一个和一个实用程序类,你可以从Activity中传递参数。

      你应该仔细阅读http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle

      然后再读一遍。

      你应该在android开发指南中仔细阅读的第二件事是Intents: http://developer.android.com/guide/topics/intents/intents-filters.html

      这些概念对任何有Java经验的开发人员来说都是新的。因此,您必须花费必要的时间来详细了解它们,以便能够创建最基本的Android应用程序。

答案 1 :(得分:1)

您可以从HelloFormStuff课程中执行以下操作。

led_functions led = new led_functions();
led.led_circleBusy();

然后从@Override方法上方删除led_circleBusy()。你不应该真的在调用其他Activity的方法。 led_functions真的是一个Activity / UI类吗?如果没有,请移除extends Activity,将LED_1添加到HelloFormStuff,然后将其作为参数传递给led.led_circleBusy(ImageView led1)

答案 2 :(得分:1)

只要所有类(特定于Android或其他类)占用相同的包/命名空间,例如com.mycompany.mypackage,就不需要导入...

对于助手......

package com.mycompany.mypackage

public class MyHelper {

    public void doSomething() {
        ...
    }

}

对于活动......

package com.mycompany.mypackage

public class MyActivity extends Activity {

    private MyHelper helper = new MyHelper();

    @Override
    protected void onCreate(...) {
        ...

        helper.doSomething();

}

答案 3 :(得分:0)

HelloFormStuff类没有led_circleBusy()实现,因此无法调用此方法

答案 4 :(得分:0)

你有两种方式。

  1. led_circleBusy()声明为静态,然后您可以将其称为led_functions.led_circleBusy()

  2. 将其保持为非静态,并在<{1}}的实例上调用它,如

    led_functions

  3. 这是严格讲Java的。如果它们实际上是两个不同的led_functions lf = new led_functions(); lf.led_circleBusy(); s(不同的“窗口”),但是一个人调用另一个,那么你应该看看Activity s。