Android: автоматически создавать переменные для всех идентификаторов в xml

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

После настройки графики, компоновка, создающая переменные ассоциации с элементами макета, очень утомительна, например ImageButton myButton = (ImageButton)findViewById(R.id.myButton);

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

Чтобы немного смягчить это, было бы очень удобно, если бы все идентификаторы, объявленные в XML, автоматически связывались с их собственными переменными, и все эти типы данных уже были включены в этот класс

Есть ли что-то, что уже делает это?

например, если я пишу

 <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/myButton" android:id="@+id/myButton"></ImageButton>

то я хотел бы, чтобы классы, которые включают этот макет, уже имели

 import android.ImageButton;

 ImageButton myButton;

 myButton = (ImageButton)findViewById(R.id.myButton);

- это параметр или функция для запроса? Я использую Eclipse IDE, и было бы очень удобно

Ответы

Ответ 1

Попробуйте использовать Аннотации Android. Он содержит полезные аннотации, чтобы заменить шаблонный код.

Например, см. @ViewById документация: просто объявите поля аннотированными

@ViewById
EditText myEditText;

@ViewById(R.id.myTextView)
TextView textView;

Он заменяет

EditText myEditText;

TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
    [...]
    myEditText = (EditText) findViewById(R.id.myEditText);
    textView = (TextView) findViewById(R.id.myTextView);
}

Ответ 2

Я создал инструмент для автоматического создания кода Java для связывания компоновки XML и логики программ вместе.

В основном он принимает XML-макет и генерирует для вас весь необходимый Java-код. Существует поддержка базовых переменных-членов, шаблонов ViewHolder, ArrayAdapter, CursorAdapter и RoboGuice.

Вы можете найти его здесь: Android Layout Finder | Звонок Android

Ответ 3

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

Самый простой способ сделать это - закодировать script, который сканирует ваши XML файлы макета в поиске компонентов с идентификатором и создает файлы .java с соответствующими определениями. Затем ваши действия могут происходить из тех автоматически генерируемых классов. Что-то вроде этого:

При обработке вашим script, который генерирует класс:

class FooBarLayoutActivityBase extends Activity ... {
  protected ImageButton myButton;

  FooBarLayoutActivityBase() {
    myButton = (ImageButton)findViewById(R.id.myButton);
  }
}

Затем вы можете просто наследовать от этого базового класса, чтобы использовать компоненты...

Подход script прост и вам не нужно вникать в код инструментальной цепочки, но вы также можете сделать это непосредственно в плагине ADT.