Что такое шаблонный движок?
Шаблонный движок — это алгоритм, который преобразует код шаблона в данные бизнес-логики. Он разделяет логику и представление.
Зачем нужен шаблонный движок?
Приведём пример из разработки. Часто нам нужно присвоить значение элементу управления на основе данных, полученных с сервера. Мы делаем это так:
<!--xml中-->
<TextView
android:id="@+id/mTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Я — textview"/>
//код
TextView mTextView = findViewById(R.id.mTextView);
mTextView.setText(datas.get("key"));
Это правильный подход, но он не всегда удобен. В реальной разработке мы часто имеем дело с большим количеством элементов управления, которым нужно присвоить значения. Например:
public void initView(View view) {
rl_gonggao = (RelativeLayout) view.findViewById(R.id.rl_gonggao);
rollPagerView = (RollPagerView) view.findViewById(R.id.rollPagerView);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
gridView = (MyGridView) view.findViewById(R.id.gridView);
search_edit = (EditText) view.findViewById(R.id.search_edit);
tv_gonggao = (TextView) view.findViewById(R.id.tv_gonggaо);
...
}
Этот подход снижает эффективность работы и увеличивает объём кода.
Можно ли упростить эту задачу? Да! Для этого существует шаблонный движок. Мы просто устанавливаем ключ в свойствах элемента управления и автоматически привязываем данные. Это экономит время и повышает эффективность.
Простота использования
Вот как это работает:
<!--xml-->
<com.wenshi.view.WsTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ws:wsValue="name" />
//код
HashMap<String ,String> data = new HashMap<>();
data.put("name","张三");
data.put("age","19 лет");
WsViewTools.renderView(this,findViewById(R.id.acv),data);
Мы просто связываем данные в Activity: WsViewTools.renderView(this, findViewById(R.id.acv), data)
. В XML мы указываем ws: wsValue = "name"
. Теперь мы можем напрямую установить «Чжан Сан» в соответствующий TextView.
Это лишь базовый пример. Шаблонный движок может делать гораздо больше.
Полная функциональность шаблонного движка
WsViewInit.setWsViewLisenter(new WsViewInit.IWsViewLisenter() {
@Override
public void onImage(ImageView imgview, String url) {
//здесь вы обрабатываете изображение, например, загружаете его с помощью Picasso
Picasso.with(context).load(url).into(imgview);
}
@Override
public void onChange(Context context, String click_to_change) {
// здесь вы обрабатываете событие клика, например, печатаете сообщение
// "click_to_change" — это данные с сервера
``` ```
Систем.аут.принтлн(клик_то_чанж);
}
});
2. В Активности свяжите данные:
```
/**
* Первый параметр Контекст
* Второй параметр Вид, который нужно связать с шаблоном
* Третий параметр HashMap<String, String> data Ваши данные
*/
ВсВьюТулс.рендерВью(это, файндВиевById(Р.ид.акв), данные);
```
+ Далее свяжем данные:
**Сначала смоделируем данные:**
HashMap<Строка, Строка> данные = новый HashMap<>(); данные.пут("нэйм", "Чжан Сань"); данные.пут("эйдж", "19 лет"); данные.пут("линк", "http://www.baidu.com"); данные.пут("имг", "https://imgsa.baidu.com/exp/w=480/sign=61953a69ab345982c58ae49a3cf4310b/95eef01f3a292df516b60208ba315c6034a873b2.jpg"); данные.пут("исшоу", "1"); данные.пут("ишхайд", "0");
+ ### **ТэВью:**
<ком.вэнши.вью.ВэСТэВью
андроид:лэйаут_видтх="уоркконтент"
андроид:лэйаут_хайт="уоркконтент"
вэС:вэСХайдИф="{ишхайд}.equals(0)"
вэС:вэСШовИф="{исшоу}.equals(1)"
вэС:вэСКликТуЧанж="линк"
вэС:вэСВалюэ="нэйм" />
Установите значение: ` вэС:вэСВалюэ="соответствующий ключ"`
Событие клика: ` вэС:вэСКликТоЧанж="соответствующий ключ"`
Определите скрытие или отображение: `вэС:вэСШовИф="{соответствующий ключ}.equals(1)"`
Если равно 1, то отображается. Наконец-то не нужно проверять код, очень удобно!
1. Этот способ клика заключается в передаче значения «линк» в метод *онЧандж* обратного вызова в *Аппликатион*, а затем вы можете обработать его в соответствии со своими потребностями. Приведенный выше код был использован для демонстрации и распечатки. Когда я нажимаю на TextView, он печатает «http://www.baidu.com».
2. Существует еще один способ клика: `вэС:вэСКликТуФункшн="фан?клик={нэйм}"`
//код публик вун(Вид вью, хэшмэп<строка, строка> данные) { //Тост показывает значение: фан: Чжан Сань Тост.мэйкт(это, "фан: " + данные.гет("клик"), Тост.ЛЕНГТХ_Шорт).шоу(); }
Объяснение: `"фан?клик={нэйм}&эйдж={эйдж}&имг={имг}"` можно объединить несколько значений. `"фан?клик={нэйм}" ==>>` имя метода `?` ключ данных, которые необходимо получить = {ключ хэшмэп}. `данные.гет("ключ данных")` таким образом мы можем напрямую получить значение, и нам больше не нужно создавать глобальные переменные для передачи.
**Таким образом, мы достигли разделения между бизнес-логикой и представлением.**
+ ### **ИмэджВью:**
Использование такое же, как у *ТэВью*. Атрибуты заполняются ключом, а обработка выполняется в методе *онИмэдж* обратного вызова *Аппликатиона*. Конечно, как обрабатывать — это ваше дело, я просто показываю.
<ком.вэнши.вью.вэСИмэджВью андроид:лэйаут_видтх="матчпэрэнт" андроид:лэйаут_хайт="200 дп" вэС:вэСВэлюэ="имг"/>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )