Android: ООП |Использование функций в других файлах - PullRequest
1 голос
/ 07 июня 2011

Я довольно новичок в Android, но у меня есть некоторый опыт (и немного ржавый) в Java и ООП.

В основном то, что делает мое приложение, когда вы нажимаете кнопку, светодиоды или "изображения" будутflash.

Я пытаюсь разделить свой проект на несколько файлов, где я могу просто импортировать 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 () имеет видundefined для типа new View.OnClickListener () {}

Поэтому я спрашиваю, как реализовать другие мои функции из других файлов.

Спасибо.

-Paul

PS: я смотрел на пример кода, и если вы задаетесь вопросом, почему я поместил что-то вроде "@Override" там, где это не нужно, просто проигнорируйте это .. Я 'пробовал случайные вещи: l

Ответы [ 5 ]

2 голосов
/ 07 июня 2011

Похоже, вам придется вернуться к изучению:

  1. Java / OOP
  2. жизненные циклы приложений Android

    1. Java / OOP

В Java вы не можете определить метод внутри другого метода, как вы это сделали с led_circleBusy () внутри onCreate ().Ваш класс led_functions не может скомпилироваться как есть.

Затем вам нужно будет либо объявить свой led_circleBusy (), чтобы вызвать его из любого места с помощью led_functions.led_circleBusy (), либо создать новый экземпляр led_functions (newled_functions ()) перед вызовом для него led_circleBusy ().

  1. жизненные циклы приложений Android

Действия в приложениях для Android можно рассматривать как "экраны".2 Действия могут общаться только через Intents.Действие в представлении в одном действии может изменить представление во втором действии только путем передачи намерения из действия A в занятие B.

Если ваши компоненты находятся на одном экране, то у вас не должно быть 2 подклассов.of 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 голос
/ 07 июня 2011

Пока все классы (специфичные для 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();

}
1 голос
/ 07 июня 2011

Вы можете сделать следующее из вашего 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).

0 голосов
/ 07 июня 2011

У вас есть два пути.

  1. Объявите led_circleBusy() как статическое, затем вы можете назвать его как led_functions.led_circleBusy()

  2. Держите его нестатичным и вызывайте его в экземпляре led_functions, как в

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

Это строго на языке Java. Если на самом деле это два разных Activity s (разные «окна»), которые не разделяют ничего, но одно вызывает другое, вам следует взглянуть на Intent s.

0 голосов
/ 07 июня 2011

Класс HelloFormStuff не имеет реализации led_circleBusy (), поэтому этот метод не может быть вызван

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...