Структура приложения
Структура приложения с библиотекой декларативного программирования крайне проста. Она должна содержать следующие несложные и небольшие классы (файлы):
- MainActivity - задает стартовый экран (в манифесте ссылка на него);
- MyDeclareScreens - описываются все экраны (фрагменты и активити);
- MyParams - задаются параметры приложения;
- MyApp - инициируются MyDeclareScreens и MyParams (наследуется от класса Application).
Естественно, названия этих классов могут быть произвольными. Ниже приведены примеры этих классов.
Стартовая активность
Активности в библиотеке только описываются для них никаких файлов не нужно и в манифесте они не объявляются. Исключением является стартовая активность, т.е. активность которая запускается первой в приложении. Ее код достаточно простой:
public class MainActivity extends BaseActivity { @Override public String getNameScreen() { return NAME_SCREEN; } }
Здесь NAME_SCREEN - строковая переменная (константа) - имя активити в описании MyDeclareScreens.
В манифесте она описывается стандартным образом.
Описание экранов
Описание экранов выполняется в классе наследнике DeclareScreens в переопределяемом методе public void declare(). При этом строки с названиями экранов можно задать здесь же.
Пример:
public class MyDeclareScreens extends DeclareScreens{ public final static String MAIN = "main", HOME = "home", SERVICE = "service", NEWS = "news", .......; public void declare() { activity(MAIN, R.layout.activity_main) .fragmentsContainer(R.id.content_frame) .navigator(handler(R.id.apply, VH.SET_LOCALE, "id_language")) .menuBottom(R.id.nav, HOME, REPAIRS_MAIN, ABOUT, NEWS) .list( // меню вибора языка model(new GetData()), view(R.id.recycler, new int[] {R.layout.item_lang, R.layout.item_lang_sel}).selected()); fragment(HOME, R.layout.fragment_home) .setValue(item(R.id.lang_txt, TS.LOCALE)) .navigator(show(R.id.sel_lang, R.id.lang, true)) .list(model(API.CATEGORIES, 1).sort("order"), view(R.id.recycler, R.layout.item_home), navigator(handler(0, CATEGORY, PS.RECORD))); ....... } }
Более подробно можно посмотреть в разделе Экраны.
Параметры настройки приложения
Для настройки библиотеки на особенности конкретного приложения используются параметры. Они заданы классе AppParams. Назначения параметров в целом понятно из их названия. Общий перечень параметров приведен в приложении. Все параметры имеют значения по умолчанию, которые можно изменить в классе наследнике от AppParams в переопределенном методе setParams().
Пример:
public class MyParams extends AppParams { @Override public void setParams() { baseUrl = "http://examples.delta.branderstudio.com/"; nameTokenInHeader = "X-Auth-Token"; NETWORK_TIMEOUT_LIMIT = 40000; ..... } }
Класс Application приложения
Класс наследник Application служит для инициализации библиотеки и передачи ей классов с описанием экранов и значениями параметров приложения.
Пример:
public class MyApp extends Application { private static MyApp instance; private Context context; public static MyApp getInstance() { if (instance == null) { instance = new MyApp(); } return instance; } @Override public void onCreate() { super.onCreate(); instance = this; context = getApplicationContext(); DeclareParam.build(context) .setAppParams(new MyParams()) .setDeclareScreens(new MyDeclareScreens()); } }
Статический метод DeclareParam.build(context) инициирует библиотеку. Метод setAppParams() устанавливает параметры приложения в библиотеке. Метод setDeclareScreens() подключает к библиотеки описание экранов.
В классе DeclareParam доступны и другие методы:
addParam(String name, String value)
Задает начальное значение value параметра с именем name.
setDB(BaseDB baseDB)
Подключает к библиотеке описание базы данных (детальное описание будет приведено далее).
Метод ComponTools getComponTools() возвращает ссылку на класс типа ComponTools через который разработчик может получить доступ к многим внутренним методам и переменным библиотеки, если в них будет необходимость при написании кастомных экранов. По факту, необходимость в нем не возникала и ни разу не использовался. Какие методы и переменные доступны будет описано ниже.
Манифест
В манифесте нужно задать MyApp и описать стартовую активити. В нем также нужно не забыть описать кастомные активности) (если они будут).
Если необходимо указываются элементы meta-data, provider, uses-permission и пр. При описании компонентов при необходимости будет указано, что нужно описать в манифесте для работы компонента.