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

OSCHINA-MIRROR/HarmonyOS-tpc-MultiType

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

MultiType: проще и гибче создавать несколько типов для ListContainer

Ранее, когда нам нужно было разработать сложный ListContainer, это было трудной и хлопотной работой. Как только нам требовалось добавить новый тип элемента, мы должны были перейти к исходному файлу адаптера и тщательно модифицировать некоторые старые коды, и эти классы адаптеров становились всё более сложными.

MultiType предоставляет удобный способ легко разрабатывать сложные ListContainers. С помощью этой библиотеки мы можем вставлять различные элементы без изменения каких-либо старых кодов itemprovider и делать их более читаемыми.

MultiType включает:

  • Normal Feature;
  • Communicate with binder feature;
  • Test Payload Feature;
  • More Api's Playground Feature.

Инструкции по использованию

Следующие основные классы являются важным интерфейсом для MultiType:

Normal Feature

Нормальная функция демонстрирует, что с использованием мультитипного адаптера пользователь может установить индивидуальный направленный фон макета в качестве элемента ListContainer. В этом типе поддерживается поддержка Gif, текста и изображения.

Создайте класс, реализующий провайдера, например:

`ListContainer listContainer = (ListContainer) rootContainer.findComponentById(ResourceTable.Id_list_main);

listContainer.setItemProvider(new MultiTypeAdapter( itemsList) { @Override public Component getMyView(int position, Component convertView, ComponentContainer parent, String data) {

    Component result = convertView;
    if (result == null) {
        result = LayoutScatter.getInstance(NormalSlice.this)
            .parse(ResourceTable.Layout_item_image, parent, false);
    }

    ViewCache viewCache = (ViewCache) result.getTag();
    if (viewCache == null) {
        viewCache = new ViewCache(result);
        result.setTag(viewCache);
    }

    viewCache.getDirectionalLayout(ResourceTable.Id_directional_layout_normal);
    viewCache.getDirectionalLayout(ResourceTable.Id_directional_layout_image_outer);
    viewCache.getNormalTextView().setText("小艾大人赛高");
    viewCache.getTextView().setText("Hello World");
    viewCache.getImageView().setPixelMap(ResourceTable.Media_avatar);
    viewCache.getImageOuterNormalView().setPixelMap(ResourceTable.Media_icon);
    return result;
}

Communicate with binder feature

Функция «Общаться с привязкой» демонстрирует простое использование ListContainer с текстовым элементом и фоном в виде направленного макета.

listContainer.setItemProvider(new MultiTypeAdapter( itemsList) { @Override public Component getMyView(int position, Component convertView, ComponentContainer parent, String data) { Component result = convertView; if (result == null) { result = LayoutScatter.getInstance(SimpleSlice.this) .parse(ResourceTable.Layout_communicate_with_binder_item, parent, false); }

                ViewCache viewCache = (ViewCache) result.getTag();
                if (viewCache == null) {
                    viewCache = new ViewCache(result);
                    result.setTag(viewCache);
                }

                viewCache.getTextView().setText(itemsList.get(position));

                viewCache.getTextView().setClickedListener(listener -> ViewUtil.showTips(getContext(), "Item " + position));
                return result;
            }
        });

Test Payload Feature

Функция Test Payload предоставляет элементы с несколькими текстовыми компонентами, включая текущее системное время. result = LayoutScatter.getInstance(TestPayloadSlice.this)
.parse(ResourceTable.Layout_item_test_payload, parent, false);

ViewCache viewCache = (ViewCache) result.getTag();
if (viewCache == null)
*{viewCache = new ViewCache(result);
result.setTag(viewCache);}
viewCache.getLastTextView().setText("currentTimeMillis: " + System.currentTimeMillis());
viewCache.getDirectionalLayoutLine();
return result;}

{

More Api's Playground Feature

Более подробно о функции игровой площадки API: в этом списке функций элементы listcontainer можно динамически добавлять, удалять и очищать из пользовательского интерфейса.

listContainer.setItemProvider(new MultiTypeAdapter(itemsList)
{@Override
public Component getMyView(int position, Component convertView, ComponentContainer parent, String data)
{Component result = convertView;
if (result == null)
{result = LayoutScatter.getInstance(MoreApisPlaygoundSlice.this)
.parse(ResourceTable.Layout_communicate_with_binder_item, parent, false);}

ViewCache viewCache = (ViewCache) result.getTag();
if (viewCache == null)
{viewCache = new ViewCache(result);
result.setTag(viewCache);}

viewCache.getTextView().setText(itemsList.get(position));
return result;}
});}

MultiTypeAdapter — это основной класс. Здесь реализуется BaseItemProvider, который создаёт каждую строку в контейнере списка.
Пользователь может передать собственный макет из класса, где реализован адаптер.
Метод getComponent возвращает компонент для каждого элемента в контейнере списка.

public Component getComponent(int position, Component convertView, ComponentContainer parent)

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

Это всё, вы готовы к работе!

# Инструкции по установке*

  1. Чтобы использовать модуль MultiType в примере приложения, добавьте зависимости в entry/build.gradle следующим образом:

dependencies {
implementation project(path: ':library')}*

  1. Используя library.har, убедитесь, что добавили файл library.har в папку entry/libs.

Измените зависимости в файле entry/build.gradle.
dependencies {
*implementation fileTree(dir: 'libs', include: [' *.jar', ' .har'])}

  1. Для использования MultiType из удалённого репозитория в отдельном приложении добавьте следующие зависимости:

Измените сборку entry следующим образом:

dependencies {
    implementation 'io.openharmony.tpc.thirdlib:MultiType:1.0.2'
}

Лицензия

Copyright 2017 drakeet.

Лицензия Apache версии 2.0 («Лицензия»);
вы не можете использовать этот файл, кроме как в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0

Если иное не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.

Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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