插件
NativeScript UI ListView
NativeScript UI ListView
注意
此文档目前正在开发中,正在从以前的文档迁移。您可以访问此处正在迁移的文档。
概述
NativeScript UI ListView 插件是一个虚拟化列表组件,提供与使用项目列表场景相关的最常用功能。所有这些功能都嵌入到一个控件中,旨在节省开发人员时间并提供更好的体验。主要功能包括
- 项目动画
- 不同的布局和方向
- 许多手势的智能默认值 - 长按选择,滑动执行特殊操作,长按并拖动重新排序项目,仅在需要时通过滑动刷新列表或加载更多项目。
安装
在命令提示符/终端中导航到您的应用程序根文件夹并运行
npm install nativescript-ui-listview
功能
不同的布局 RadListView 支持三种不同的项目布局策略,这些策略通常用于移动应用程序
列表 - 项目堆叠 - 根据滚动方向水平或垂直堆叠。
网格 - 项目排列成列或行 - 根据滚动方向。
交错网格 - 项目以交错网格形式排序 - 根据滚动方向排列成行或列。
所有布局都是虚拟化的,并且针对移动设备进行了优化。
选择
用于 NativeScript 的 RadListView 公开了 API,允许您启用项目选择和跟踪选择更改。
使用选择机制时,可以使用两种选择模式
- 单选
- 多选
RadListView 还公开了方便的 API,用于以编程方式选择或取消选择项目并获取当前选定的项目。RadListView 公开了以下方法来管理选择
selectAll()
- 选择数据源中所有可用的项目deselectAll()
- 取消选择数据源中所有当前选定的项目selectItemAt(index)
- 选择指定索引处的项目deselectItemAt(index)
- 如果已选择,则取消选择指定索引处的项目isItemSelected(item)
- 确定提供的项目是否已选择getSelectedItems()
- 返回当前选定项目的数组
在 RadListView 中启用选择
selectionBehavior
属性的值决定了项目选择的工作方式。它接受来自 ListViewSelectionBehavior
枚举的值
- ListViewSelectionBehavior.None - 无法选择项目
- ListViewSelectionBehavior.Press - 通过点击项目来选择项目
- ListViewSelectionBehavior.LongPress - 通过按住项目来选择项目
此外,multipleSelection
属性的值决定了将使用哪种选择模式。可用选项为
- 多选模式 - 允许选择多个项目。
RadListView
会跟踪哪些项目已选中,并通过getSelectedItems()
方法公开它们。通过将multipleSelection
属性设置为true
来启用多选。 - 单选模式 - 每次只能选择一个项目。通过将
multipleSelection
属性设置为false
来启用此模式。
在 XML 中启用 RadListView 的多选
处理选择事件
为了在项目的选择状态发生变化时通知您,RadListView 公开了以下事件
itemSelecting
- 在选择项目之前触发。可用于取消操作。itemSelected
- 成功选择项目后触发。此时,该项目已存在于getSelectedItems()
方法返回的已选中项目数组中。itemDeselecting
- 在取消选择项目之前触发。可用于取消操作。itemDeselected
- 成功取消选择项目后触发。此时,该项目不再是getSelectedItems()
方法返回的已选中项目数组的一部分。
示例
单选
/// 风格:普通
<GridLayout orientation="vertical" rows="auto, *, auto">
<lv:RadListView
id="listView"
items="{{ dataItems }}"
row="1"
selectionBehavior="Press"
itemSelected="onItemSelected"
itemDeselected="onItemDeselected"
>
<lv:RadListView.itemTemplate>
<StackLayout orientation="vertical" paddingLeft="16">
<Label fontSize="20" text="{{ itemName }}" />
<Label fontSize="13" text="{{ itemEmail }}" />
</StackLayout>
</lv:RadListView.itemTemplate>
</lv:RadListView>
<Label id="txtSelection" textWrap="true" row="2" />
</GridLayout>
export function onItemSelected(args) {
const selectedItems = listView.getSelectedItems()
let selectedTitles = 'Selected items: '
for (let i = 0; i < selectedItems.length; i++) {
selectedTitles += selectedItems[i].itemName
if (i < selectedItems.length - 1) {
selectedTitles += ', '
}
}
lblSelection.text = selectedTitles
}
export function onItemDeselected(args) {
const selectedItems = listView.getSelectedItems()
let selectedTitles = 'Selected items: '
for (let i = 0; i < selectedItems.length; i++) {
selectedTitles += selectedItems[i].itemName
if (i < selectedItems.length - 1) {
selectedTitles += ', '
}
}
lblSelection.text = selectedTitles
}
///
多选
/// 风格:普通
<Page
loaded="onPageLoaded"
xmlns:lv="nativescript-ui-listview"
xmlns="http://www.nativescript.org/tns.xsd"
>
<lv:RadListView
id="listView"
items="{{ dataItems }}"
row="1"
selectionBehavior="Press"
multipleSelection="true"
>
<lv:RadListView.itemTemplate>
<StackLayout orientation="vertical" android:paddingLeft="16" ios:paddingLeft="50">
<Label fontSize="20" text="{{ name }}" />
</StackLayout>
</lv:RadListView.itemTemplate>
</lv:RadListView>
</Page>
///
编程选择
/// 风格:普通
<Page
loaded="onPageLoaded"
xmlns:lv="nativescript-ui-listview"
xmlns="http://www.nativescript.org/tns.xsd"
>
<GridLayout orientation="vertical" rows="auto, *">
<lv:RadListView
items="{{ dataItems }}"
row="1"
id="listView"
multipleSelection="true"
selectionBehavior="Press"
>
<lv:RadListView.itemTemplate>
<StackLayout orientation="vertical" ios:paddingLeft="50" android:paddingLeft="16">
<Label fontSize="20" text="{{ itemName }}" />
<Label fontSize="14" text="{{ itemEmail }}" />
</StackLayout>
</lv:RadListView.itemTemplate>
</lv:RadListView>
</GridLayout>
</Page>
export function onPageLoaded(args) {
const page = args.object
listView = page.getViewById('listView')
}
export function onSelectItemAtTap(args) {
listView.selectItemAt(Number(txtSelectItemIndex.text))
}
export function onDeselectItemAtTap(args) {
listView.deselectItemAt(Number(txtDeselectItemIndex.text))
}
export function onSelectAllTap(args) {
listView.selectAll()
}
export function onDeselectAllTap(args) {
listView.deselectAll()
}
///
第一个可见索引
getFirstVisiblePosition()
返回列表视图中的第一个可见位置。
/// 风格:普通
import { RadListView } from 'nativescript-ui-listview'
let myList: RadListView
export function onPageLoaded(args) {
const page = args.object as Page
myList = page.getViewById('myList') as RadListView
}
export function getTheFirstVisiblePositionOfTheList() {
const firstVisibleIndex = myList.getFirstVisiblePosition()
console.log('First visible index:', firstVisibleIndex)
}
///
水平布局
/// 风格:普通
<lv:RadListView items="{{ dataItems }}" horizontalAlignement="center">
<lv:RadListView.itemTemplate>
<StackLayout orientation="vertical">
<Label fontSize="20" text="{{ itemName }}" />
<Label fontSize="14" text="{{ itemDescription }}" textWrap="true" />
</StackLayout>
</lv:RadListView.itemTemplate>
<lv:RadListView.listViewLayout>
<lv:ListViewLinearLayout scrollDirection="Horizontal" />
</lv:RadListView.listViewLayout>
</lv:RadListView>
///
下拉刷新
pullToRefresh
- 设置为 true
以启用下拉刷新功能。
pullToRefreshInitiated
- 用于启动更新列表视图项目的数据处理的事件。
/// 风格:普通
<lv:RadListView
items="{{ dataItems }}"
pullToRefresh="true"
pullToRefreshInitiated="{{ onPullToRefreshInitiated }}"
>
<lv:RadListView.itemTemplate>
<StackLayout
orientation="vertical"
padding="5 10 5 10"
style="background-color: #7fff7f;"
>
<StackLayout
orientation="horizontal"
padding="10"
style="background-color: #65a565;"
>
<img:Img height="100" width="80" src="{{ image }}" />
<StackLayout orientation="vertical" marginLeft="15">
<Label fontSize="20" text="{{ name }}" marginBottom="8" />
<Label
fontSize="14"
text="{{ title }}"
style="font-weight: bold;"
textWrap="true"
/>
<Label fontSize="12" text="{{ text }}" color="White" textWrap="true" />
</StackLayout>
</StackLayout>
</StackLayout>
</lv:RadListView.itemTemplate>
</lv:RadListView>
import { ListViewEventData } from 'nativescript-ui-listview'
async onPullToRefreshInitiated(args: ListViewEventData) {
// some operation to fetch more data items from a backend service/API
const data = await someHttpCall()
if (data) {
// add the data to your existing observable array bound to the RLV Items
const listView = args.object;
listView.notifyPullToRefreshFinished();
}
}
///
文档
API 参考
此处 是 API 参考部分。
- 上一页
- 存储