MultiType: проще и гибче создавать несколько типов для ListContainer
Ранее, когда нам нужно было разработать сложный ListContainer, это было трудной и хлопотной работой. Как только нам требовалось добавить новый тип элемента, мы должны были перейти к исходному файлу адаптера и тщательно модифицировать некоторые старые коды, и эти классы адаптеров становились всё более сложными.
MultiType предоставляет удобный способ легко разрабатывать сложные ListContainers. С помощью этой библиотеки мы можем вставлять различные элементы без изменения каких-либо старых кодов itemprovider и делать их более читаемыми.
MultiType включает:
Следующие основные классы являются важным интерфейсом для 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)
Пожалуйста, обратитесь к примеру приложения, которое представляет собой приложение для отображения различных типов контейнеров списков. Используя один адаптер, можно реализовать несколько типов контейнеров списков.
Это всё, вы готовы к работе!
# Инструкции по установке*
dependencies {
implementation project(path: ':library')}*
Измените зависимости в файле entry/build.gradle.
dependencies {
*implementation fileTree(dir: 'libs', include: [' *.jar', ' .har'])}
Измените сборку 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 )