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.