Java: взаимодействие / подключение Android пользовательского интерфейса (Android Studio) и java бэкэнда (модель) (по сравнению с JavaFX) - PullRequest
0 голосов
/ 25 января 2020

Я довольно новичок в программировании и начал с Java, перешел на JavaFX как GUI разработку и только что занялся Android Разработка приложений с помощью Android Studio.

Исходя из JavaFX и его Концепция подключения пользовательского интерфейса к бэкэнд-контроллеру Меня немного смущает (по-видимому) гораздо более сложное взаимодействие Android пользовательского интерфейса с Java бэкэндом (контроллер, модель).

Мой сценарий: Я запрограммировал игровое приложение на JavaFX, которое работает вполне нормально. Я применил концепцию MVC, тогда как я использовал F XML для создания пользовательского интерфейса, имел класс Controller. java, который «соединял» все элементы пользовательского интерфейса через @ F XML с моим классом контроллера, и затем я мог - пересечь -метод в контроллере - доступ к моим элементам пользовательского интерфейса (например, для чтения значений из ползунков или их изменения), например:

@FXML
private text label;

public void readLabel(){

String labelText = label.getText();
}

Сейчас: в Android (с использованием Android Studio) я пытался применить ту же концепцию / идею, но не удалось, потому что, очевидно, различные виды, кнопки, тексты соответственно имеют свои собственные классы, которые необходимо привести друг к другу, чтобы их содержимое можно было использовать.

Итак, я следовал концепции Android и попытался первоначально объявить все элементы пользовательского интерфейса в классе MainActivity следующим образом:

public class MainActivity extends AppCompatActivity {

    EditText inputText = (EditText) findViewById(R.id.text1);
    EditText outputText = (EditText) findViewById(R.id.textOutput);
    Button enterButton = (Button) findViewByID(R.id.button1);

...

Это потому, что я хочу использовать повторно (просто доступ / изменение ) их различными способами в рамках MainActivity. Вышеуказанный подход не удался из-за исключения NullPointerException. Я попытался инициализировать соответствующие объекты, например:

Button button1 = new Button();

, но это тоже не сработало.

Однако, если я использую вышеуказанный подход WITHIN, метод MainActivity, он работает нормально:

public class MainActivity extends AppCompatActivity {

public void enterMessage(View view){

        EditText inputText = (EditText) findViewById(R.id.text1);
        String textOutput = inputText.getText().toString();

        EditText outputText = (EditText) findViewById(R.id.textOutput);
        outputText.setText(textOutput);

    }

, и я могу читать и изменять свои объекты пользовательского интерфейса.

Затем у меня появилась идея сделать stati c «метод контроллера» в MainActivity, чтобы я мог получить доступ к своему пользовательскому интерфейсу элементы из любого другого метода в моей MainActivity. Но это не сработает, потому что

findViewById()

не go вместе с методами stati c.

Таким образом, единственный способ, который я вижу сейчас, попробовав эти разные подходы, - это создать новые объекты и приведите их к необходимой переменной, например:

EditText inputText = (EditText) findViewById(R.id.text1);
String textOutput = inputText.getText().toString();

в КАЖДОМ методе, который я хочу создать в MainActivity.

Теперь мой вопрос: является ли концепция с Android Действительно, классы пользовательского интерфейса более сложные по сравнению с JavaFX, или я просто ошибаюсь где-то с основами? Любой намек на лучшую практику очень ценится. :)

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 января 2020

Более сложным является жизненный цикл представлений внутри Android приложения. Например, в Swing Java нет такого понятия, как жизненный цикл представления / контроллера, и я не знаю о JavaFX. Базовые платформы не одинаковы, хотя языки программирования.

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

Вы должны прослушивать события жизненного цикла Activity, поскольку они могут влиять на то, все еще существуют ваши объекты View или нет. Например: у вас может быть запущен экземпляр MainActivity, но при простом переключении телефона в альбомном режиме вы получите текущий MainActivity d ie и получите новый экземпляр с обновленным представлением.

Android activity lifecycle

Таким образом, вы найдете много findViewById во время разработки приложения Android. Но есть решения, которые немного облегчают разработку Android.

Наблюдая за вашим опытом работы с @FXML, я бы посоветовал вам взглянуть на ButterKnife , который представляет собой процессор аннотаций, который заботится о findingViewById для вас и может вам очень помочь. , Похоже, способ использования представлений аналогичен

Также обратите внимание на Android компонентов архитектуры , так как они используют много стандартного кода и позволяют вам сосредоточиться на том, что вы хочу написать. Специально DataBinding

Я также настоятельно рекомендую вам взглянуть на Kotlin, поскольку он работает на JVM и вы можете использовать его как для Android, так и Java разработки. Оказывается, это действительно забавный язык и довольно эффективный в плане объема кода, который вы должны написать, чтобы что-то сделать.

0 голосов
/ 27 января 2020

Спасибо @Some случайный айтишник за руководство.

На самом деле моя проблема / путаница теперь решена. Что бы я мог порекомендовать, для того чтобы иметь более простое взаимодействие GUI -обэкэнда, это использовать новую функцию привязки View.

Доступна привязка View (https://developer.android.com/topic/libraries/view-binding) в Android Студия 3.6 Canary 11+. Прямо сейчас это означает установку предварительной версии Android Studio, но с этим она работает просто отлично.

Привязка к представлению - это стандартизированная функция, которая фактически обеспечивает функциональность, аналогичную Butter Knife. Согласно веб-сайту Butter Knife, «привязка к представлению», по-видимому, является функциональным преемником.

Инструкции по использованию привязки к представлению включены в приведенную выше ссылку. Выполнение этих шагов позволяет вам взаимодействовать с Android GUI аналогично подходу в JavaFX.

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