1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/epii-android-view-template

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Шаблонный движок: описание

Что такое шаблонный движок?

Шаблонный движок — это алгоритм, который преобразует код шаблона в данные бизнес-логики. Он разделяет логику и представление.

Зачем нужен шаблонный движок?

Приведём пример из разработки. Часто нам нужно присвоить значение элементу управления на основе данных, полученных с сервера. Мы делаем это так:

<!--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.

Это лишь базовый пример. Шаблонный движок может делать гораздо больше.

Полная функциональность шаблонного движка

  • Подготовка:*
  1. Определите в методе onCreate вашего Application:
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 )

Вы можете оставить комментарий после Вход в систему

Введение

Шаблонизатор Android, привязка данных и шаблонов очень проста. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/epii-android-view-template.git
git@api.gitlife.ru:oschina-mirror/epii-android-view-template.git
oschina-mirror
epii-android-view-template
epii-android-view-template
master