# Titanium.UI.ListView

> A list view is used to present information, organized in to sections and items, in a vertically-scrolling view.

- Source: https://titaniumsdk.com/docs/sdk/13.0.0/Titanium.UI.ListView
- Titanium SDK version: 13.0.0
- Kind: view
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.1.0
- Extends: Titanium.UI.View
- Inheritance: Titanium.UI.View > Titanium.Proxy

| Android | iOS |
| ------- | --- |
| ![Android](./listview_android.png) | ![iOS](./listview_ios.png) |

Use the [Titanium.UI.createListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#createListView) method or **`<ListView>`** Alloy element to create a `ListView`.

A `ListView` object is a container for [ListSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md)
objects that are, in turn, containers for [ListItem](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md) objects. This is
easily visualized as an Alloy view:

``` xml
<Alloy>
    <ListView id="list">
        <ListSection>
            <ListItem title="List item 1"></ListItem>
            <ListItem title="List item 2"></ListItem>
            <ListItem title="List item 3"></ListItem>
        </ListSection>
    </ListView>
</Alloy>
```

For more instructions and examples of using `ListView`, refer to the
[ListViews guide](https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/User_Interface_Deep_Dives/ListViews/).

#### Creating a List

To create a `ListView` object using JavaScript, pass an array of [ListDataItem](https://titaniumsdk.com/docs/sdk/ListDataItem.md) objects to the list section's
[items](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md#items) property, which creates and adds each array
element as a row to a single [ListSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md). Use the `ListView`'s
[sections](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#sections) property to add the section(s) to the list view.

By default, only the `image`, `title` and `accessoryType` of a list data item
are displayed in the list. Refer to the next section for using an item template.

See the "List View Sections" example.

#### Customizing the List Items

To create a custom list view, you need to define an [ItemTemplate](https://titaniumsdk.com/docs/sdk/ItemTemplate.md) and define each view
component you want to add. Use the `bindId` property of the child template to bind a dictionary
property in the item data to a child view component.

Map the template to a style name using the [Titanium.UI.ListView.templates](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#templates) property, then use
the style name to  set the [Titanium.UI.ListView.defaultItemTemplate](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#defaultItemTemplate) property to globally change
all item styles or set the [ListDataItem.template](https://titaniumsdk.com/docs/sdk/ListDataItem.md#template) property when passing in your list data
to apply the template to that one list item or to override the globally defined template.

On iOS, you can specify one of the template constants for the [ListDataItem.template](https://titaniumsdk.com/docs/sdk/ListDataItem.md#template) property
or [Titanium.UI.ListView.defaultItemTemplate](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#defaultItemTemplate):
[Titanium.UI.LIST_ITEM_TEMPLATE_CONTACTS](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#LIST_ITEM_TEMPLATE_CONTACTS), [Titanium.UI.LIST_ITEM_TEMPLATE_SETTINGS](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#LIST_ITEM_TEMPLATE_SETTINGS)
or [Titanium.UI.LIST_ITEM_TEMPLATE_SUBTITLE](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#LIST_ITEM_TEMPLATE_SUBTITLE).

See [Titanium.UI.ListItem](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md) for a detailed description of creating list items with a custom
item template and see the "List View with Custom Item Template" example for a sample.

#### List and Table Views

This section describes the differences between the new list view and the old table view.

`ListView` is analogous to `TableView`, `ListSection` is analogous to `TableViewSection`, and
`ListItem` is analogous to `TableViewRow`.

Both list view and table view present data to user as a vertically scrolling list of rows.
However, list view uses a data-oriented approach versus table view's view-oriented approach.

List view is designed for performance. One side effect of the design is that you cannot directly
manipulate the views--add children, set view properties and bind event callbacks--as you can in
`TableView`. Instead, you interact with list items indirectly, using templates and data items. The
next subsection describes how to use list items.

##### ListItem versus TableViewRow

With `TableView`, you can directly add rows to a table view using the data property and its accessors.
With `TableViewRows`, you can directly create a row using the `Ti.UI.createTableViewRow` and customize
its styling by setting its view properties. You can add view subcomponents to the row using the add
method.

With `ListView`, you need to explicitly create a `ListSection` in order to add a `ListItem` to a `ListView`.
You cannot directly add a `ListItem` to a `ListView`.
In a `TableView`, a `TableViewRow` can be directly added to a `TableView` because a
`TableViewSection` is implicitly created and added to the `TableView`.

A `ListItem` object is not created in the same method as a `TableViewRow`.
A `ListItem` is created by passing an array of `ListDataItem` objects to the `ListSection`.

You cannot add views to a `ListItem` using the `add` method, which could be done with a
`TableViewRow`. To add views to a `ListItem`, you need to define an [ItemTemplate](https://titaniumsdk.com/docs/sdk/ItemTemplate.md),
which is bound to a list data item using the `template` property.

You cannot explicitly set properties or bind events for a `ListItem`.  You have to set them using the
`properties` dictionary of a [ListDataItem](https://titaniumsdk.com/docs/sdk/ListDataItem.md) or [ItemTemplate](https://titaniumsdk.com/docs/sdk/ItemTemplate.md) and the `events` dictionary of the
[ItemTemplate](https://titaniumsdk.com/docs/sdk/ItemTemplate.md) or [ViewTemplate](https://titaniumsdk.com/docs/sdk/ViewTemplate.md), respectively.

##### API Differences

- **TableViewRow properties**: The following properties and their accessors are not
  available for `ListItem`: `accessibilityLabel`, `className`, `editable`, `hasCheck`,
  `hasChild`, `hasDetail`, `leftImage`, `moveable` and `rightImage`.

    - For `hasCheck`, `hasChild`, and `hasDetail`, use the `accessoryType` property.
    - For `leftImage` and `rightImage`, use the `image` property or create a custom item template.

- **TableViewRow methods**: `ListItem` does not support any methods. Adding views and binding
  event callbacks are supported through the item template.

- **TableViewSection properties**: The following properties and their accessors are not
  supported by `ListSection`: `rows` and `rowCount`.

    - For `rows`, use the `items` property.
    - For `rowCount`, use the `itemCount` property. (Not yet implemented.)

- **TableViewSection methods**: The following methods are not supported by `ListSection`:
  `add`, `remove` and `rowAtIndex`.

    - For `rowAtIndex`, use the `getItemAt` method.
    - For `add` and `remove`, use the other `ListSection` methods to manipulate the `ListItem`
      objects in the `ListSection`.

- **TableView properties**: The `data` property and its accessors are not available
  for `ListView`. Use the `sections` property to set the `ListSections` for a `ListView`.  You
  cannot directly add `ListItem` objects to a `ListView`.

- **TableView methods**: The following methods are not available to `ListView`:
  `appendRow`, `deleteRow`, `deselectRow`, `insertRowAfter`, `insertRowBefore`, `selectRow`,
  `updateRow`, `scrollToIndex` and `selectRow`.

    - For `scrollToIndex`, use the `scrollToItem` method.
    - For `selectRow`, use the `selectItem` method. (Currently implemented only for iOS.)
    - For all other row methods, you cannot manipulate `ListItems` with a `ListView`.
      You have to manipulate them with the `ListSection` they are contained in.

#### List and Scroll Views

As a list view inherently scrolls, it creates a very poor user experience when it contains
other scrolling views, such as a [ScrollableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ScrollableView.md) or
[TextArea](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextArea.md). Thus, this layout is strongly discouraged.

#### TextFields in Lists with SOFT_INPUT_ADJUST_PAN (Android)
In order to use [TextField](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextField.md) inside `ListView`, [SOFT_INPUT_ADJUST_PAN](https://titaniumsdk.com/docs/sdk/Titanium.UI.Android.md#SOFT_INPUT_ADJUST_PAN)
must be set to the window that is containing the `ListView`, otherwise the [TextField](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextField.md) may not be able to gain focus.

When a [TextField](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextField.md) is placed in a row near the bottom of a `ListView`,
in a window that is configured with
[SOFT_INPUT_ADJUST_PAN](https://titaniumsdk.com/docs/sdk/Titanium.UI.Android.md#SOFT_INPUT_ADJUST_PAN), it is expected for the
text field to automatically move to a visible position after it is focused and the software
keyboard displayed. However, due to a known problem caused by native Android's `ListView` behavior,
the keyboard is likely to completely obscure the text field.

To mitigate this, a `ScrollView` may be used instead of a list view, as demonstrated in the
[ScrollView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ScrollView.md), "Scroll View as a Table View", example.

#### Editing Support

Editing a ListView through user initiated actions is supported through the following properties.

- **ListItem properties**:

    - [canEdit](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#canEdit) - When this is set to true, it allows the item to be deleted
      from the ListView through a user initiated action. The item can only be deleted when the ListView is
      in editing mode. The ListView can enter 'editing' mode either by explicitly setting the [editing](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#editing)
      property to true, or by swiping accross an item whose `canEdit` property is set to true. When the user
      deletes the item, a [delete](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#delete) event is fired.

    - [editActions](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#editActions) - When [canEdit](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#canEdit) is set to true, the default behavior
      is to allow the item to be deleted. This behavior can be overridden by using the [editActions](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#editActions)
      property of the item. When this property is defined, the user is instead presented with the options as defined by the [title](https://titaniumsdk.com/docs/sdk/RowActionType.md#title) property.
      In this scenario the ListView does not fire a [delete](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#delete) event. Instead the [editaction](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#editaction) event is fired
      and the developer is free to update the ListView as required. This is supported on Titanium SDK 4.1.0 and later on the iOS platform.

    - [canInsert](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#canInsert) - When this is set to true, it allows the item to insert a new item to the
      ListView through a user initiated action. A new item can only be inserted when the ListView is
      in editing mode. The ListView can enter 'editing' mode by explicitly setting the [editing](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#editing)
      property to true. When the user clicks on the '+' sign of the item, an [insert](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#insert) event is fired.
      Note: A new item is not inserted automatically when clicking on the '+' sign to let you decide the way to insert a new item.
      You can use any inserting method of [Ti.UI.ListSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md), for example [insertItemsAt](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md#insertItemsAt)
      and [appendItems](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListSection.md#appendItems).

    - [canMove](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#canMove) - When this item is set to true, it allows the item to be moved
      to a different location within the ListView. The item can only be moved when the ListView is put in
      editing mode by explicitly setting the [editing](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#editing) property to true. When the
      user moves an item, a [move](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#move) event is fired.

- **ListView properties**:

    - [editing](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#editing) - Determines if the List View is in a state where items can
      be deleted or reordered.

    - [requiresEditingToMove](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#requiresEditingToMove) - Determines if the ListView
      should be able to drag-and-drop without explicitely enabling editing support (like drag bars).

    - [pruneSectionsOnEdit](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pruneSectionsOnEdit) - When this property is set to true and the
      user action results in a section having no other items, the section is deleted from the List View. Please note
      that this property only applies to the sections whose items are being edited.

## Example: List View Sections

Creates a list with three sections, each with two rows.
Adds two sections to the table before and one after it is rendered.

``` js
var win = Ti.UI.createWindow({backgroundColor: 'gray'});
var listView = Ti.UI.createListView();
var sections = [];

var fruitDataSet = [
    {properties: { title: 'Apple'}},
    {properties: { title: 'Banana'}},
];
var fruitSection = Ti.UI.createListSection({ headerTitle: 'Fruits', items: fruitDataSet});
sections.push(fruitSection);

var vegDataSet = [
    {properties: { title: 'Carrots'}},
    {properties: { title: 'Potatoes'}},
];
var vegSection = Ti.UI.createListSection({ headerTitle: 'Vegetables', items: vegDataSet});
sections.push(vegSection);

listView.sections = sections;
win.add(listView);
win.open();

var fishDataSet = [
    {properties: { title: 'Cod'}},
    {properties: { title: 'Haddock'}},
];
var fishSection = Ti.UI.createListSection({ headerTitle: 'Fish', items: fishDataSet});
listView.appendSection(fishSection);
```

## Example: List View with Custom Item Template

Modifies the previous example to create a list using an item template to customize the view layout.

``` js
var win = Ti.UI.createWindow({backgroundColor: 'white'});

// Create a custom template that displays an image on the left,
// then a title next to it with a subtitle below it.
var myTemplate = {
    childTemplates: [
        {                            // Image justified left
            type: 'Ti.UI.ImageView', // Use an image view for the image
            bindId: 'pic',           // Maps to a custom pic property of the item data
            properties: {            // Sets the image view  properties
                width: '50dp', height: '50dp', left: 0
            }
        },
        {                            // Title
            type: 'Ti.UI.Label',     // Use a label for the title
            bindId: 'info',          // Maps to a custom info property of the item data
            properties: {            // Sets the label properties
                color: 'black',
                font: { fontFamily:'Arial', fontSize: '20dp', fontWeight:'bold' },
                left: '60dp', top: 0,
            }
        },
        {                            // Subtitle
            type: 'Ti.UI.Label',     // Use a label for the subtitle
            bindId: 'es_info',       // Maps to a custom es_info property of the item data
            properties: {            // Sets the label properties
                color: 'gray',
                font: { fontFamily:'Arial', fontSize: '14dp' },
                left: '60dp', top: '25dp',
            }
        }
    ]
};

var listView = Ti.UI.createListView({
    // Maps myTemplate dictionary to 'template' string
    templates: { 'template': myTemplate },
    // Use 'template', that is, the myTemplate dict created earlier
    // for all items as long as the template property is not defined for an item.
    defaultItemTemplate: 'template'
});
var sections = [];

var fruitDataSet = [
    // the text property of info maps to the text property of the title label
    // the text property of es_info maps to text property of the subtitle label
    // the image property of pic maps to the image property of the image view
    { info: {text: 'Apple'}, es_info: {text: 'Manzana'}, pic: {image: 'apple.png'}},
    { info: {text: 'Banana'}, es_info: {text: 'Banana'}, pic: {image: 'banana.png'}}
];
var fruitSection = Ti.UI.createListSection({ headerTitle: 'Fruits / Frutas', items: fruitDataSet});
sections.push(fruitSection);

var vegDataSet = [
    { info: {text: 'Carrot'}, es_info: {text: 'Zanahoria'}, pic: {image: 'carrot.png'}},
    { info: {text: 'Potato'}, es_info: {text: 'Patata'}, pic: {image: 'potato.png'}}
];
var vegSection = Ti.UI.createListSection({ headerTitle: 'Vegetables / Verduras', items: vegDataSet});
sections.push(vegSection);

var grainDataSet = [
    { info: {text: 'Corn'}, es_info: {text: 'Maiz'}, pic: {image: 'corn.png'}},
    { info: {text: 'Rice'}, es_info: {text: 'Arroz'}, pic: {image: 'rice.png'}}
];
var grainSection = Ti.UI.createListSection({ headerTitle: 'Grains / Granos', items: grainDataSet});
sections.push(grainSection);

listView.sections = sections;
win.add(listView);
win.open();
```

## Example: List View with a pullView

This sample shows how the [pullView](Titanium.UI.ListView.pullView) property could be
utilized along with the [pull](Titanium.UI.ListView.pull) and [pullend](Titanium.UI.ListView.pullend) events to
create a refresh control.

``` js
var win = Ti.UI.createWindow();
var listView = Ti.UI.createListView({height:'90%', top:0});
var sections = [];

var fruitDataSet = [
    {properties: { title: 'Apple'}},
    {properties: { title: 'Banana'}},
];
var fruitSection = Ti.UI.createListSection({ headerTitle: 'Fruits', items: fruitDataSet});
sections.push(fruitSection);

var vegDataSet = [
    {properties: { title: 'Carrots'}},
    {properties: { title: 'Potatoes'}},
];
var vegSection = Ti.UI.createListSection({ headerTitle: 'Vegetables', items: vegDataSet});

var fishDataSet = [
    {properties: { title: 'Cod'}},
    {properties: { title: 'Haddock'}},
];
var fishSection = Ti.UI.createListSection({ headerTitle: 'Fish', items: fishDataSet});

listView.sections = sections;
var refreshCount = 0;

function getFormattedDate(){
    var date = new Date();
    return date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear() + ' ' + date.getHours() + ':' + date.getMinutes();
}

function resetPullHeader(){
    actInd.hide();
    imageArrow.transform=Ti.UI.createMatrix2D();
    if (refreshCount < 2) {
        imageArrow.show();
        labelStatus.text = 'Pull down to refresh...';
        labelLastUpdated.text = 'Last Updated: ' + getFormattedDate();
    } else {
        labelStatus.text = 'Nothing To Refresh';
        labelLastUpdated.text = 'Last Updated: ' + getFormattedDate();
        listView.removeEventListener('pull', pullListener);
        listView.removeEventListener('pullend', pullendListener);
        eventStatus.text = 'Removed event listeners.';
    }
    listView.setContentInsets({top:0}, {animated:true});
}

function loadTableData()
{
    if (refreshCount == 0) {
        listView.appendSection(vegSection);
    } else if (refreshCount == 1) {
        listView.appendSection(fishSection);
    }
    refreshCount ++;
    resetPullHeader();
}

function pullListener(e){
    eventStatus.text = 'EVENT pull FIRED. e.active = '+e.active;
    if (e.active == false) {
        var unrotate = Ti.UI.createMatrix2D();
        imageArrow.animate({transform:unrotate, duration:180});
        labelStatus.text = 'Pull down to refresh...';
    } else {
        var rotate = Ti.UI.createMatrix2D().rotate(180);
        imageArrow.animate({transform:rotate, duration:180});
        if (refreshCount == 0) {
            labelStatus.text = 'Release to get Vegetables...';
        } else {
            labelStatus.text = 'Release to get Fish...';
        }
    }
}

function pullendListener(e){
    eventStatus.text = 'EVENT pullend FIRED.';

    if (refreshCount == 0) {
        labelStatus.text = 'Loading Vegetables...';
    } else {
        labelStatus.text = 'Loading Fish...';
    }
    imageArrow.hide();
    actInd.show();
    listView.setContentInsets({top:80}, {animated:true});
    setTimeout(function(){
        loadTableData();
    }, 2000);
}

var tableHeader = Ti.UI.createView({
    backgroundColor:'#e2e7ed',
    width:320, height:80
});

var border = Ti.UI.createView({
    backgroundColor:'#576c89',
    bottom:0,
    height:2
});
tableHeader.add(border);

var imageArrow = Ti.UI.createImageView({
    image:'arrow.png',
    left:20, bottom:10,
    width:23, height:60
});
tableHeader.add(imageArrow);

var labelStatus = Ti.UI.createLabel({
    color:'#576c89',
    font:{fontSize:13, fontWeight:'bold'},
    text:'Pull down to refresh...',
    textAlign:'center',
    left:55, bottom:30,
    width:200
});
tableHeader.add(labelStatus);

var labelLastUpdated = Ti.UI.createLabel({
    color:'#576c89',
    font:{fontSize:12},
    text:'Last Updated: ' + getFormattedDate(),
    textAlign:'center',
    left:55, bottom:15,
    width:200
});
tableHeader.add(labelLastUpdated);

var actInd = Ti.UI.createActivityIndicator({
    left:20, bottom:13,
    width:30, height:30
});
tableHeader.add(actInd);
listView.pullView = tableHeader;
listView.addEventListener('pull', pullListener);
listView.addEventListener('pullend',pullendListener);

var eventStatus = Ti.UI.createLabel({
    font:{fontSize:13, fontWeight:'bold'},
    text: 'Event data will show here',
    bottom:0,
    height:'10%'
})

win.add(listView);
win.add(eventStatus);
win.open();
```

## Example: Alloy XML Markup

'List View with Custom Item Template' as an Alloy view.  List view markup is supported in
Alloy 1.2.0 and later.

`app/views/index.xml`:
``` xml
<Alloy>
    <Window>
        <ListView id="listView" defaultItemTemplate="template">

            <!-- The Templates tag sets the ListView's templates property -->

            <Templates>

                <!-- Define your item templates within the Templates tags or use the
                      Require tag to include a view that only contains an ItemTemplate -->

                <ItemTemplate name="template">
                    <ImageView bindId="pic" id="icon" />
                    <Label bindId="info" id="title" />
                    <Label bindId="es_info" id="subtitle" />
                </ItemTemplate>

            </Templates>

            <ListSection headerTitle="Fruit / Frutas">

                <!-- You can specify any ListItem or ListDataItem properties in ListItem -->

                <!-- Specify data to bind to the item template with inline attributes
                      defined as <bindId>:<Ti.UI.Component.property> -->

                <ListItem info:text="Apple" es_info:text="Manzana" pic:image="/apple.png" />
                <ListItem info:text="Banana" es_info:text="Banana" pic:image="/banana.png" />
            </ListSection>
            <ListSection headerTitle="Vegetables / Verduras">
                <ListItem info:text="Carrot" es_info:text="Zanahoria" pic:image="/carrot.png" />
                <ListItem info:text="Potato" es_info:text="Patata" pic:image="/potato.png" />
            </ListSection>
            <ListSection headerTitle="Grains / Granos">
                <ListItem info:text="Corn" es_info:text="Maiz" pic:image="/corn.png" />
                <ListItem info:text="Rice" es_info:text="Arroz" pic:image="/rice.png" />
            </ListSection>
        </ListView>
    </Window>
</Alloy>
```

`app/styles/index.tss`:
``` js
"#icon" : {
    width: '50dp', height: '50dp', left: 0
},
"#title" : {
    color: 'black',
    font: { fontFamily:'Arial', fontSize: '20dp', fontWeight:'bold' },
    left: '60dp', top: 0
},
"#subtitle" : {
    color: 'gray',
    font: { fontFamily:'Arial', fontSize: '14dp' },
    left: '60dp', top: '25dp'
}
```

## Example: Alloy example of ListView properties

Supported in Alloy 1.3.0 and later.

In Alloy, ListView's `searchView`, `headerView`, `footerView`, and `pullView`
properties may be declared as XML elements inline with the `ListView` element.  The example
below demonstrates how to use `searchView`, `headerView` and `footerView`.

``` xml
<Alloy>
    <Window fullscreen="true">
        <ListView>
            <!-- Sets ListView's searchView property.
                  For Android, you can also do <SearchView platform="android" />
                  to use a Ti.UI.Android.SearchView instead of a search bar. -->
            <SearchBar barColor="#000" />

            <!-- Sets ListView's headerView property -->
            <HeaderView>
                <View backgroundColor="#DDD" height="Ti.UI.SIZE">
                    <Label>Header View</Label>
                </View>>
            </HeaderView>

            <ListSection>
                <ListItem title="Papaya" searchableText="Papaya"/>
                <ListItem title="Peach" searchableText="Peach"/>
                <ListItem title="Pear" searchableText="Pear"/>
                <ListItem title="Persimmon" searchableText="Persimmon"/>
                <ListItem title="Pineapple" searchableText="Pineapple"/>
                <ListItem title="Pluot" searchableText="Pluto"/>
                <ListItem title="Pomegranate" searchableText="Pomegranate"/>
            </ListSection>

            <!-- Sets ListView's footerView property -->
            <FooterView>
                <View backgroundColor="#DDD" height="Ti.UI.SIZE">
                    <Label>Footer View</Label>
                </View>
            </FooterView>
        </ListView>
    </Window>
</Alloy>
```

## Example: Alloy example of `<PullView>` element

The example below demonstrates how to use a `<PullView>` Alloy element.

``` xml
<!-- views/index.xml -->
<Alloy>
    <Window class="container" >
        <ListView id="list">
            <ListSection>
                <ListItem title="Number 1"></ListItem>
                <ListItem title="Number 2"></ListItem>
            </ListSection>
            <PullView>
                <View backgroundColor="red" height="50">
                    <Label>Release to reload</Label>
                </View>
            </PullView>
        </ListView>
    </Window>
</Alloy>
```

## Properties

### allowsMultipleSelectionDuringEditing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 7.0.0, iPad 7.0.0, macOS 9.2.0
- Default: `false`

Determines whether multiple items of this list view can be selected at the same time while editing the table.

### allowsMultipleSelectionInteraction

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0
- Default: `false`

Allows a two-finger pan gesture to automatically transition the table view into editing mode and start selecting rows.

Setting this property to true allows the user to start selecting multiple contiguous rows via a two-finger pan gesture.
If the table view is already in editing mode, the user can also select multiple rows via a one-finger pan gesture along
the edge of the table that contains editing controls (checkboxes). In order to support this behavior,
you must also set [Titanium.UI.ListView.allowsMultipleSelectionDuringEditing](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#allowsMultipleSelectionDuringEditing) to true.
Once user interaction stops the [Titanium.UI.ListView.itemsselected](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#itemsselected) event is fired.

### allowsSelection

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Default: `true`

Determines whether this item can be selected.

Set to `false` to prevent the item from being selected.

On iOS, even if this property is set to `false`, you can interact with the detail disclosure
accessory (`accessoryType` set to [Titanium.UI.LIST_ACCESSORY_TYPE_DETAIL](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#LIST_ACCESSORY_TYPE_DETAIL)) and any child
templates that are controls, such as a button, slider, etc.

### allowsSelectionDuringEditing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 5.4.0, iPad 5.4.0, macOS 9.2.0
- Default: `false`

Determines whether this list view items can be selected while editing the table.

### canScroll

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 6.1.0, iPhone 3.2.0, iPad 3.2.0
- Default: `true`

Determines if the list view can scroll in response to user actions.

Set to false to disable scrolling.

### caseInsensitiveSearch

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- Default: `true`

Determines if the search performed is case insensitive.

Used in conjunction with [searchView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchView) and  [searchText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchText) properties of
List View and [searchableText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#searchableText) property of List Item.

### contentOffset

- Type: Point
- Platforms: Android
- Since: Titanium SDK 12.4.0

X and Y coordinates to which to reposition the top-left point of the content region.

### continuousUpdate

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 11.1.0
- Default: `false`

Determines if the scrolling event should fire every time there is a new visible item.

When setting `continuousUpdate` to `true` the [scrolling](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#scrolling) event will fire every time a new item is scrolled in.

### defaultItemTemplate

- Type: String | Number
- Platforms: Android, iPhone, iPad, macOS
- Default: `Titanium.UI.LIST_ITEM_TEMPLATE_DEFAULT`

Sets the default template for list data items that do not specify the `template` property.

Can be set to any of the built-in templates or those defined in the `templates` property.

Can be changed dynamically.

### dimBackgroundForSearch

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.2.0
- Default: `true`

A Boolean indicating whether the underlying content is dimmed during a search.

If you do not want to show the dimmed background when clicking on the search bar,
set this property `false` during creation.

### disableBounce

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.4.0
- Default: `false`

Determines whether the scroll-bounce of the list view should be disabled.

Set to `true` to disable the vertical bounce.

### editing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0
- Default: `false`

Determines if the list view is currently in editing mode.

For more information see the "Editing Support" section of [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).

### fastScroll

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 7.5.0
- Default: `false`

Sets the fastScroll mode on Android ListViews.

Set to `true` to enable fastScroll mode.  When fast scrolling is enabled, the user
can quickly scroll through lists by dragging the fast scroll thumb.

### fixedSize

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 11.0.0
- Default: `false`

Sets fixedSize mode on Android ListViews.

Set it to `true` if all ListItems have the same size to gain some performance.

### footerDividersEnabled

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 3.3.0
- Default: `undefined but behaves as false`

When set to false, the ListView will not draw the divider before the footer view.

### footerTitle

- Type: String
- Platforms: Android, iPhone, iPad, macOS

List view footer title.

### footerView

- Type: Titanium.UI.View
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

List view footer as a view that will be rendered instead of a label.

In Alloy you can specify this property with a `<FooterView>` child element of a `<ListView>`
element (see Examples). On Android, this is a creation only property.

### forceUpdates

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 12.3.0
- Default: `false`

Optimize the `continuousUpdate` scrolling event.

If `continuousUpdate` is enabled and you set `forceUpdates` to `true` it will fire the scrolling](Titanium.UI.ListView.scrolling) all the time.
Otherwise it will only update when a new item is scrolled in (default).

### headerDividersEnabled

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 3.3.0
- Default: `undefined but behaves as false`

When set to false, the ListView will not draw the divider after the header view.

### headerTitle

- Type: String
- Platforms: Android, iPhone, iPad, macOS

List view header title.

### headerView

- Type: Titanium.UI.View
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

List view header as a view that will be rendered instead of a label.

On Android, this is a creation only property.
In Alloy you can specify this property with a `<HeaderView>` child element of a `<ListView>`
element (see Examples).

### keepSectionsInSearch

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- Default: `false`

Determines if the section information is displayed in the search results when using the `searchText` property.

Used in conjunction with [searchText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchText) property of List View
and [searchableText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#searchableText) property of List Item.

### keyboardDismissMode

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.0.0
- Default: `Undefined (behaves like <Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_NONE>)`

The manner in which the keyboard is dismissed when a drag begins in the list view.

Accepts: `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_INTERACTIVE`, `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_NONE`, `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_ON_DRAG`

### lazyLoadingEnabled

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.1.0
- Default: `true`

Determines if the list view should use lazy loading to load remote images.

Lazy loading is used to load remote images only if they are in the visible view area. It is enabled
by default. If you disable it, images will be loaded even if they are currently not visible. Disabling
improves the loading of images, but can also cause trouble in list views having a lot of
remote images, because every remote image opens a new HTTP request.

### listSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.4.0

The insets for the list view header and footer.

Cell separators do not extend all the way to the edge of the list view. Set this to a
dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the
right edge. If the rowSeparatorInsets is not set, the listSeparatorInsets will also set the cell insets.

For example:
``` js
listView.listSeparatorInsets = {
    left: 10,
    right: 10
};
```

### pruneSectionsOnEdit

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- Default: `false`

Determines if empty sections are retained when the user completes editing the list view.

For more information see the "Editing Support" section of [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).

### pullView

- Type: Titanium.UI.View
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

View positioned above the first row that is only revealed when the user drags the list view contents down.

A `pullView` is a UI control that is often used to provide a convenient way for the user to refresh
a table's data.  Typically used in conjunction with [setContentInsets](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#setContentInsets)
method and [pull](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pull) and [pullend](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullend) events.

To specify the wrapper color see [Titanium.UI.View.pullBackgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.View.md#pullBackgroundColor).

In Alloy you can assign this property with a `<PullView>` child element of a `<ListView>`
element:

``` xml
<Alloy>
  <ListView>
    <ListSection>
      <ListItem title="Item a"></ListItem>
      <ListItem title="Item b"></ListItem>
      <ListItem title="Item c"></ListItem>
    </ListSection>
    <PullView>
      <View height="50" backgroundColor="black">
        <Label/>
      </View>
    </PullView>
  </ListView>
</Alloy>
```

See the code example on `pullView` to  see how it may be utilized.

### refreshControl

- Type: Titanium.UI.RefreshControl
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 6.2.0, iPhone 3.2.0, iPad 3.2.0

View positioned above the first row that is only revealed when the user drags the list view contents down.

An alternate to the pullView property. See [Titanium.UI.RefreshControl](https://titaniumsdk.com/docs/sdk/Titanium.UI.RefreshControl.md) for usage and examples.

### requiresEditingToMove

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 11.1.0
- Default: `true`

Determines if the list view should allow drag-and-drop even without going into the editing mode

For more information see the "Editing Support" section of [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).

### resultsBackgroundColor

- Type: String | Titanium.UI.Color
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0
- Default: `undefined (behaves as white)`

The background color of the search results (iOS-only).

For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).
Note: A transparent background-color is not officially supported by Apple to
prevent that the list of results overlaps with the list view below it.

### resultsSeparatorColor

- Type: String | Titanium.UI.Color
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0
- Default: `undefined (behaves as gray)`

Separator line color between rows inside search results,
as a color name or hex triplet (iOS-only).

To make the line invisible, set this property to `transparent`, or the same value as the
[backgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#backgroundColor) property.
For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).

### resultsSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0

The insets for search results separators (applies to all cells & iOS-only).

Cell separators do not extend all the way to the edge of the list view.
This property sets the default inset for all cells in the table.
Set this to a dictionary with two keys, `left` specifying inset from left edge and `right`
specifying the inset from the right edge.

### resultsSeparatorStyle

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0

The separator style of the search results (iOS-only).

Accepts: `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_NONE`, `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_SINGLE_LINE`

### rowSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

The insets for list view cells (applies to all cells).

Cell separators do not extend all the way to the edge of the list view. Set this to a
dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the
right edge. This property is only available upon creation of the cells.

For example:
``` js
listView.rowSeparatorInsets = {
    left: 10,
    right: 10
};
```

### scrollIndicatorStyle

- Type: Number
- Platforms: iPhone, iPad, macOS
- Default: `<Titanium.UI.iOS.ScrollIndicatorStyle.DEFAULT>`

Style of the scrollbar.

Accepts: `Titanium.UI.iOS.ScrollIndicatorStyle.BLACK`, `Titanium.UI.iOS.ScrollIndicatorStyle.DEFAULT`, `Titanium.UI.iOS.ScrollIndicatorStyle.WHITE`

### searchText

- Type: String
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

The string to use as the search parameter.

Provides a generic search API for the List View. This property can not be used when the
[searchView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchView) property is set. Used in conjunction with
[caseInsensitiveSearch](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#caseInsensitiveSearch) property of List View and
[searchableText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#searchableText) property of List Item.

On iOS, when using this property the [style](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#style) property of the
List View is honored. If the [keepSectionsInSearch](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#keepSectionsInSearch) property
is set to true then section information is preserved in the search results, otherwise the search
results are displayed in a single section.

### searchView

- Type: Titanium.UI.SearchBar | Titanium.UI.Android.SearchView
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Search field to use for the list view.

Provides the same functionality as the [search](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#search) property in
[TableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md). Used in conjunction with
[caseInsensitiveSearch](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#caseInsensitiveSearch) property of List View and
[searchableText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#searchableText) property of List Item.

On Android, you can either specify [Titanium.UI.SearchBar](https://titaniumsdk.com/docs/sdk/Titanium.UI.SearchBar.md) or [Titanium.UI.Android.SearchView](https://titaniumsdk.com/docs/sdk/Titanium.UI.Android.SearchView.md),
while on iOS only [Titanium.UI.SearchBar](https://titaniumsdk.com/docs/sdk/Titanium.UI.SearchBar.md) is supported.

In an Alloy application, you can use a `<SearchView>` or `<SearchBar>` element inside a `<ListView>` element.

``` xml
<Alloy>
    <ListView>
        <!-- search, shorthand with Ti.UI.SearchBar -->
      <SearchBar class="search" platform="ios"/>
      <!-- search, shorthand with Ti.UI.Android.SearchView -->
      <SearchView ns="Ti.UI.Android" class="search" platform="android"/>
    </ListView>
</Alloy>
```

### sectionCount

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Permission: read-only

Number of sections in this list view.

### sectionHeaderTopPadding

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 10.1.0
- Requires: iOS 15.0+

Padding above each section header.

If not set or set to `-1`, it defaults to an automatic spacing determined by the system.

### sectionIndexTitles

- Type: Array<ListViewIndexEntry>
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Array of objects (with `title` and `index` properties) to control the list view index.

If an index array is specified, an index bar is displayed on the right-hand side of the list view.
Clicking on a title in the index bar scrolls the list view to the section index associated with that title.

### sections

- Type: Array<Titanium.UI.ListSection>
- Platforms: Android, iPhone, iPad, macOS

Sections of this list.

### selectedItems

- Type: Array<ListItemEventType>
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 7.0.0, iPad 7.0.0, macOS 9.2.0

Returns the selected list view items.

### separatorColor

- Type: String | Titanium.UI.Color
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- Default: `platform-specific default color`

Separator line color between items, as a color name or hex triplet.

To make the line invisible, set this property to `transparent`, or the same value as the
[backgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#backgroundColor) property.
For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).

### separatorHeight

- Type: String | Number
- Platforms: Android
- Since: Titanium SDK 4.1.0

height of the ListView separator.

Height of the ListView separator, in platform-specific units. If undefined, default native height will be used.
Numerical inputs are treated as pixels. For example, 3 and "3px" are equivalent.
On Android API < 23 you must specify [Titanium.UI.ListView.separatorStyle](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#separatorStyle) and
[Titanium.UI.ListView.separatorColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#separatorColor) for this property to work.

### separatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- DEPRECATED since 5.2.0. Use [Titanium.UI.ListView.listSeparatorInsets](Titanium.UI.ListView.listSeparatorInsets) instead.

The insets for list view separators (applies to all cells).

Cell separators do not extend all the way to the edge of the list view.
This property sets the default inset for all cells in the table.
Set this to a dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the right edge.

### separatorStyle

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 8.1.0, iPhone 3.2.0, iPad 3.2.0

Separator style constant.

Accepts: `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_NONE`, `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_SINGLE_LINE`

### showSearchBarInNavBar

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 8.1.0
- Default: `false`

A Boolean indicating whether search bar will be in navigation bar.

If you want to show the search bar in navigation bar, set this property `true` during creation.
Use the [Titanium.UI.Window.hidesSearchBarWhenScrolling](https://titaniumsdk.com/docs/sdk/Titanium.UI.Window.md#hidesSearchBarWhenScrolling) property to control the visibility of the
searchbar when scrolling.

### showSelectionCheck

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 10.1.0
- Default: `true`

Determines whether the selection checkmark is displayed on selected items.

### showVerticalScrollIndicator

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Default: `true`

Determines whether this list view displays a vertical scroll indicator.

Set to `false` to hide the vertical scroll indicator.

### style

- Type: Number
- Platforms: iPhone, iPad, macOS
- Default: `Titanium.UI.iOS.ListViewStyle.PLAIN`

Style of the list view.

Style should always be set before setting the sections on list view.

Accepts: `Titanium.UI.iOS.ListViewStyle.GROUPED`, `Titanium.UI.iOS.ListViewStyle.INSET_GROUPED`, `Titanium.UI.iOS.ListViewStyle.PLAIN`

### tableSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0
- DEPRECATED since 5.4.0. Use [Titanium.UI.ListView.listSeparatorInsets](Titanium.UI.ListView.listSeparatorInsets) instead.

The insets for the table view header and footer.

Cell separators do not extend all the way to the edge of the list view. Set this to a
dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the
right edge. If the rowSeparatorInsets is not set, the tableSeparatorInsets will also set the cell insets.

For example:

``` js
listView.tableSeparatorInsets = {
    left: 10,
    right: 10
};
```

### templates

- Type: Dictionary
- Platforms: Android, iPhone, iPad, macOS

Contain key-value pairs mapping a style name (key) to an [ItemTemplate](https://titaniumsdk.com/docs/sdk/ItemTemplate.md) (value).

This property cannot be changed once a window has been opened.

### touchFeedback

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 10.0.0
- Default: `true`

A material design visual construct that provides an instantaneous visual confirmation of touch point.

Touch feedback is only applied to a view's background.

### willScrollOnStatusTap

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Default: `true`

Controls the scroll-to-top gesture.

If the user taps on the status bar, the view scrolls to the top.
This gesture works when you have a single visible list view.
If there are multiple list views, table views, web views, text areas, and/or scroll views visible,
you need to disable (set to `false`) this property on the views you **DO NOT** want to
enable this behavior for.  The remaining view responds to the scroll-to-top gesture.

## Methods

### addMarker

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 4.1.0

Adds a reference item in the list view.

See [marker](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#marker) event for details.

Parameters:

- `markerProps` (ListViewMarkerProps): Dictionary to describe the reference item.

### appendSection

- Platforms: Android, iPhone, iPad, macOS

Appends a single section or an array of sections to the end of the list.

On iOS, the section(s) can be inserted with an animation by specifying the `animation`
parameter.

Parameters:

- `section` (Titanium.UI.ListSection | Array<Titanium.UI.ListSection>): Section or sections to add to the list.
- `animation` (ListViewAnimationProperties, optional): Animation properties. (iOS only.)

### deleteSectionAt

- Platforms: Android, iPhone, iPad, macOS

Deletes an existing section.

On iOS, the section can be deleted with an animation by specifying the `animation` parameter.

Parameters:

- `sectionIndex` (Number): Index of the section to delete.
- `animation` (ListViewAnimationProperties, optional): Animation properties. (iOS only.)

### deselectItem

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Deselects a specific item.

Parameters:

- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.

### insertSectionAt

- Platforms: Android, iPhone, iPad, macOS

Inserts a section or an array of sections at a specific index.

Existing sections at that index and after are pushed down.

On iOS, the section(s) may be inserted with an animation by setting the `animation` parameter.

Parameters:

- `sectionIndex` (Number): Index of the section to insert before.
- `section` (Titanium.UI.ListSection | Array<Titanium.UI.ListSection>): Section or sections to insert.
- `animation` (ListViewAnimationProperties, optional): Animation properties. (iOS only.)

### replaceSectionAt

- Platforms: Android, iPhone, iPad, macOS

Replaces an existing section.

On iOS, the section may be replaced with an animation by setting the `animation` parameter.

Parameters:

- `sectionIndex` (Number): Index of the section to update.
- `section` (Titanium.UI.ListSection): section data to update.
- `animation` (ListViewAnimationProperties, optional): Animation properties. (iOS only.)

### scrollToItem

- Platforms: Android, iPhone, iPad, macOS

Scrolls to a specific item.

On Android 4.x, the list does not stop at the correct position.
This is a known bug in Android.
([Android Issue #37278](https://code.google.com/p/android/issues/detail?id=37278))

Android added support for the `animation` parameter in Release 3.3.0 on the Titanium SDK.

Parameters:

- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `animation` (ListViewAnimationProperties, optional): Animation properties. (iOS, Android and Windows)

### selectItem

- Platforms: iPhone, iPad, macOS

Selects an item in the list using the specified item and section indices.

Parameters:

- `sectionIndex` (Number): Index of the section the item is in.
- `itemIndex` (Number): Index of the item to select.

### setContentInsets

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Sets this list view's content insets.

A list view is essentially a scroll view that contains a set of static row views that
represents the content. Thus, the `setContentInsets` method facilitates a margin, or inset,
distance between the content and the container scroll view.

Typically used with the [pullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullView) property.

Parameters:

- `edgeInsets` (Padding): Sets the distance that the content view is inset from the enclosing scroll view of the list view. For example setContentInset({top:50,bottom:10,right:10,left:10}, {animated:true})
- `options` (AnimatedWithDurationOptions, optional): Determines whether, and how, the content inset change should be animated. Note that the default here is equivalent to passing in `{ animated: false, duration: 300 }`

### setContentOffset

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 3.4.0, iPad 3.4.0, macOS 9.2.0

Sets the value of the content offset of the list view without animation by default.

Parameters:

- `contentOffset` (Point): Dictionary with the properties `x`, `y`. The `x` and `y` coordinates reposition the top-left point of the scrollable region of the list view.
- `options` (AnimatedOptions, optional): Pass in `{ animated: true }` to animate the transition. Note that the default here is equivalent to passing in `{ animated: false }` Default: `{ animated: false }`.

### setMarker

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Sets a reference item in the list view.

This method replaces previous reference items with the current one.
See [marker](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#marker) event for details.

Parameters:

- `markerProps` (ListViewMarkerProps): Dictionary to describe the reference item.

## Events

### cancelprefetch

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0

Fired when list items that previously were considered as candidates for pre-fetching were not
actually used. Note that this event is only available on iOS 10 and later

Use the `sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Event properties:

- `prefetchedItems` (Array<ListItemEventType>): An array of prefetched items.

### delete

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.0.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0

Fired when a list row is deleted by the user.

Do not rely on the `source` property to determine which item fired the event.  Use the
`sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Note that the `sectionIndex` and `itemIndex` properties of this event correspond to the List View state
before the user action.

Event properties:

- `section` (Titanium.UI.ListSection): List section from which the item is deleted.
- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `itemId` (String): The item ID bound to the list item that generated the event.
- `bubbles` (Boolean): false. This event does not bubble.

### dragend

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

Fired when the user stops dragging the list view.

Different to the `pullend` event, this event does also fire when no [pullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullView)
is specified and the user drags inside the list view.

Event properties:

- `bubbles` (Boolean): false. This event does not bubble.

### dragstart

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

Fired when the user starts dragging the list view.

Different to the `pull` event, this event does also fire when no [pullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullView)
is specified and the user drags inside the list view.

Event properties:

- `bubbles` (Boolean): false. This event does not bubble.

### editaction

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.0.0

Fired when the user interacts with one of the custom edit actions defined by [Titanium.UI.ListItem.editActions](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListItem.md#editActions).

Do not rely on the `source` property to determine which item fired the event.  Use the
`sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event.

Note that the `sectionIndex` and `itemIndex` properties of this event correspond to the list view state
before the user action.

Event properties:

- `action` (String): The [title](https://titaniumsdk.com/docs/sdk/RowActionType.md#title) as defined in the row action object.
- `identifier` (String): The [identifier](RowActionType. identifier) of the row action. Only included in the event if previously defined. Available in Titanium 6.0.0 and later.
- `section` (Titanium.UI.ListSection): List section from which the event was generated.
- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `itemId` (String): The item ID bound to the list item that generated the event.
- `bubbles` (Boolean): false. This event does not bubble.

### indexclick

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.4.0

Fired when the index bar is clicked by the user.

If the list view contains the [sectionIndexTitles](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#sectionIndexTitles) array of indices the index bar will appear on the side.
This event will fire when this bar is clicked

Event properties:

- `title` (String): The title of the index clicked.
- `index` (Number): The index number clicked.

### insert

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.4.0

Fired when a list row is inserted by the user.

Do not rely on the `source` property to determine which item fired the event.  Use the
`sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Note that the `sectionIndex` and `itemIndex` properties of this event correspond to the List View state
before the user action.

Event properties:

- `section` (Titanium.UI.ListSection): List section from which the item is deleted.
- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `itemId` (String): The item ID bound to the list item that generated the event.
- `bubbles` (Boolean): false. This event does not bubble.

### itemclick

- Platforms: Android, iPhone, iPad, macOS

Fired when a list row is clicked by the user.

Do not rely on the `source` property to determine which item fired the event.  Use the
`sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Event properties:

- `section` (Titanium.UI.ListSection): List section if the item is contained in a list section.
- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `itemId` (String): The item ID bound to the list item that generated the event.
- `bindId` (String): The bind ID of the control that generated this event, if one exists.
- `accessoryClicked` (Boolean): Returns `true` if the detail button is clicked else returns `false`. Only returns `true` if the `accessoryType` property is set to [Titanium.UI.LIST_ACCESSORY_TYPE_DETAIL](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#LIST_ACCESSORY_TYPE_DETAIL). All other accessories return `false` if clicked.

### itemsselected

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0

Fired when user stops two-pan gesture interaction for selecting multiple items.
It is used with [Titanium.UI.ListView.allowsMultipleSelectionInteraction](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#allowsMultipleSelectionInteraction).

Event properties:

- `selectedItems` (Array<SelectedItem>): List of items selected by user.
- `startingItem` (SelectedItem): First item selected when user started interaction.

### marker

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Fired when the list view displays the reference item.

This event is fired only once per reference item. Use this in conjunction with the [setMarker](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#setMarker) and [addMarker](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#addMarker) methods.
On iOS this method does not fire when list view is in search mode.

Event properties:

- `bubbles` (Boolean): false. This event does not bubble.
- `sectionIndex` (Number): section index of the reference item.
- `itemIndex` (Number): section item index of the reference item.

### move

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0

Fired when a list row is moved to a different location by the user.

Do not rely on the `source` property to determine which item fired the event.  Use the
`sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Note that the `sectionIndex`,`itemIndex`,`targetSectionIndex` and `targetItemIndex` properties of this event correspond to the List View state
before the user action.

Event properties:

- `section` (Titanium.UI.ListSection): List section from which the item is moved.
- `sectionIndex` (Number): Section index.
- `itemIndex` (Number): Item index.
- `targetSection` (Titanium.UI.ListSection): List section to which the item is moved. Might be the same as `section` property.
- `targetSectionIndex` (Number): Section index.
- `targetItemIndex` (Number): Position within the `targetSection`.
- `itemId` (String): The item ID bound to the list item that generated the event.
- `bubbles` (Boolean): false. This event does not bubble.

### moveend

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 11.1.0

Fired when a list row has ended moving.

This property can be used to change the UI once a drag-and-drop interaction ends.

### movestart

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 11.1.0

Fired when a list row has started moving.

This event can be used to change the UI once a new drag-and-drop interaction starts.
The event properties are available in Titanium SDK 12.0.0+

Event properties:

- `section` (Titanium.UI.ListSection): List section from which the item is moved.
- `sectionIndex` (Number): section index of the reference item.
- `itemIndex` (Number): section item index of the reference item.

### noresults

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 4.2.0, iPhone 3.3.0, iPad 3.3.0

Fired when the search using either [searchView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchView) or [searchText](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#searchText) has no results.

When items are filtered in a list view using either the `searchView` or `searchText`, it is possible that the search
returns an empty set.

While the `searchView` API automatically shows a **No Results** cell in the list view, the `searchText` API does not do so.
Developers can listen to this event and perform appropriate actions when the search result set is empty.

Event properties:

- `bubbles` (Boolean): false. This event does not bubble.

### prefetch

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.1.0

Fired when new list items are prefetched. The items are ordered ascending by geometric distance
from the list view. Note that this event is only available on iOS 10 and later.

Use the `sectionIndex` and `itemIndex`, or the `itemId` to determine the list item that generated
the event, and use the `bindId` to check which child control fired the event.

Event properties:

- `prefetchedItems` (Array<ListItemEventType>): An array of prefetched items.

### pull

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Fired when the user drags the list view past the top edge of the [pullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullView).

Event properties:

- `active` (Boolean): Determines if the `pullView` is completely visible (true) or partially hidden (false).
- `bubbles` (Boolean): false. This event does not bubble.

### pullend

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0

Fired when the user stops dragging the list view and the [pullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md#pullView) is completely visible.

Event properties:

- `bubbles` (Boolean): false. This event does not bubble.

### scrollend

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 4.1.0

Fires when the list view ends scrolling. Calling the `scrollTo` methods will not fire this event

This event will fire when the list view ends scrolling. Use the `firstVisibleSectionIndex` and
the `firstVisibleItemIndex` to determine the position of the list view.

Event properties:

- `visibleItemCount` (Number): The number of visible items in the list view when the event fires.
- `firstVisibleItem` (Object | Number): The first visible item in the list view when the event fires; this item might not be fully visible. May be -1 on iOS.
- `firstVisibleSection` (Titanium.UI.ListSection): The first visible section in the list view when the event fires.
- `firstVisibleItemIndex` (Number): The index of the first visible item in the list view when the event fires; this item might not be fully visible.
- `firstVisibleSectionIndex` (Number): The index of the first visible section in the list view when the event fires.
- `bubbles` (Boolean): false. This event does not bubble.

### scrolling

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 6.1.0, iPhone 5.4.0, iPad 5.4.0

Fires when the list view is scrolling. Calling the `scrollTo` methods will not fire this event

This event will fire while the list view is scrolling and the user releases the finger.
On iOS no event is fired when the finger is not released. Use  `direction` to determine the scroll direction,
`velocity` to determine scroll speed, targetContentOffset to determine where the scrolling will end (in dpi).
When `direction` is `down`, `velocity` is negative and viceversa. On Android `velocity` and `targetContentOffset` is 0.

Event properties:

- `direction` (String): Direction of the scroll either 'up', 'down' or 'unknown'.
- `velocity` (Number): The velocity of the scroll in scale factor per second
- `targetContentOffset` (Number): The expected y axis offset when the scrolling action decelerates to a stop.
- `visibleItemCount` (Number): The number of visible items in the list view when the event fires.
- `firstVisibleItem` (Object | Number): The first visible item in the list view when the event fires; this item might not be fully visible. May be -1 on iOS.
- `firstVisibleSection` (Titanium.UI.ListSection): The first visible section in the list view when the event fires.
- `firstVisibleItemIndex` (Number): The index of the first visible item in the list view when the event fires; this item might not be fully visible. Note: The index is `-1` when there are no items in the [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).
- `firstVisibleSectionIndex` (Number): The index of the first visible section in the list view when the event fires. Note: The index is `-1` when there are no items in the [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).

### scrollstart

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 4.1.0

Fires when the list view starts scrolling by user interaction. Calling the `scrollTo` methods will not fire this event

This event will fire when the user starts scrolling the list view. Use the `firstVisibleSectionIndex` and
the `firstVisibleItemIndex` to determine the position of the list view.

Event properties:

- `visibleItemCount` (Number): The number of visible items in the list view when the event fires.
- `firstVisibleItem` (Object | Number): The first visible item in the list view when the event fires; this item might not be fully visible. May be -1 on iOS.
- `firstVisibleSection` (Titanium.UI.ListSection): The first visible section in the list view when the event fires.
- `firstVisibleItemIndex` (Number): The index of the first visible item in the list view when the event fires; this item might not be fully visible. Note: The index is `-1` when there are no items in the [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).
- `firstVisibleSectionIndex` (Number): The index of the first visible section in the list view when the event fires. Note: The index is `-1` when there are no items in the [Titanium.UI.ListView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ListView.md).
- `bubbles` (Boolean): false. This event does not bubble.

## Inherited members

81 members are inherited. Each is documented on the type that declares it.

- [Titanium.Proxy](https://titaniumsdk.com/docs/sdk/13.0.0/Titanium.Proxy.md): `addEventListener`, `apiName`, `applyProperties`, `bubbleParent`, `fireEvent`, `lifecycleContainer`, `removeEventListener`
- [Titanium.UI.View](https://titaniumsdk.com/docs/sdk/13.0.0/Titanium.UI.View.md): `accessibilityDisableLongPress`, `accessibilityHidden`, `accessibilityHint`, `accessibilityLabel`, `accessibilityValue`, `anchorPoint`, `animate`, `animatedCenter`, `backgroundColor`, `backgroundDisabledColor`, `backgroundDisabledImage`, `backgroundFocusedColor`, `backgroundFocusedImage`, `backgroundGradient`, `backgroundImage`, `backgroundLeftCap`, `backgroundRepeat`, `backgroundTopCap`, `borderColor`, `borderRadius`, `borderWidth`, `bottom`, `center`, `clearMotionEffects`, `clipMode`, `convertPointToView`, `elevation`, `filterTouchesWhenObscured`, `focusable`, `getViewById`, `height`, `hiddenBehavior`, `hide`, `horizontalMotionEffect`, `horizontalWrap`, `id`, `insertAt`, `keepScreenOn`, `layout`, `left`, `opacity`, `overrideCurrentAnimation`, `previewContext`, `pullBackgroundColor`, `rect`, `right`, `rotate`, `rotation`, `rotationX`, `rotationY`, `scaleX`, `scaleY`, `show`, `size`, `softKeyboardOnFocus`, `stopAnimation`, `tintColor`, `toImage`, `tooltip`, `top`, `touchEnabled`, `touchFeedbackColor`, `transform`, `transitionName`, `translationX`, `translationY`, `translationZ`, `verticalMotionEffect`, `viewShadowColor`, `viewShadowOffset`, `viewShadowRadius`, `visible`, `width`, `zIndex`

---

- This corpus documents Titanium SDK 13.4.1. Anything here that does not name a version describes 13.4.1.
- Titanium is maintained by TiDev. The Appcelerator toolchain is retired: there is no `appc` CLI, no Appcelerator Studio and no hosted build service. The supported CLI is `titanium` on npm, invoked as `ti`.

