B4A Library [Lib] UltimateListView

I've been working on this project for a long time and I'm very proud to release the version 4 today.

The UltimateListView is, as its pompous name says, THE ListView.

  • It can handle very long lists. This is a screenshot of a list with 245813 items, all different:

    verylonglist.jpg


  • It can mix different layouts (and they can be changed dynamically). You can use it as an expandable ListView:

    layouts.jpg


  • It has a low memory footprint and is very fast (this report comes from the Performance demo where the list has to display 128901 distinct words read from a database and the used device is a Huawei Honor single core 1.4 Ghz):

    performance.png


  • It can scroll in both directions thanks to its swipe detector:

    tables.jpg


  • The swipe detector can also be used to implement a swipe-to-dismiss or a swipe-to-reveal:

    swipedetector.png
  • You can easily add editors to your table to change its content:

    celledit.jpg


  • You can animate the items when they are added, removed, replaced or when the list is scrolled (with your own custom animation):

    animationclap.png


  • It can stack items from the bottom:

    stackfrombottom.png


  • It supports drag & drop operations (internal & external):

    dragndrop.png


  • You can synchronize lists with different item heights:

    grid.jpg
The examples will show you how to implement a Pull-to-Refresh, create sticky headers or combine several lists to make a wheel. One of the examples is an improved version of my File Explorer class.

All texts and images can be loaded asynchronously (from Internet, from a database or from a local folder), so you can scroll even if the data are not fully loaded.

The list has its own state manager.

Since September 2018, ULV is available for free. You can still donate for it if you wish.
To send the money, just click on the Donate button below (the amount to enter is in euros):


Note that UltimateListView is not a wrapper around the work of someone else. It is 100% my own code and it is based upon the standard Java ListView of Android.

The UltimateListView does not work with Android versions < 2. It cannot work with B4J or B4i.

Current version: 4.50

DOWNLOAD HERE:
 
Last edited:

Informatix

Expert
Licensed User
Longtime User
Will you share source code for all libraries? Without the source code it's kind of dangerous or impossible to use libs created by others in projects that are published in play store as there is no updates in case of problems.
Good point. As long as I continue to maintain ULV, the sources will remain only on my disk. If I consider abandoning the product, I will no doubt publish them. In any case, I won't leave users with a product that can't be fixed.
Free distribution of ULV does not mean terminating support for existing donors or abandoning the product in the near future.
 

incendio

Well-Known Member
Licensed User
Longtime User
Hi,

Since this library became free, can we post here if we encounter problems when using ULV?
 

jimmyF

Active Member
Licensed User
Longtime User
Has anyone an idea how to get the ULV_ItemTouch event to register?
is there a setting in the setup of the ULV perhaps?
I don't see it and I get no response at all to:
B4X:
Sub ULV_ItemTouch(Position As Int, Action As Int, X As Int, Y As Int, TouchedPanel As Panel)

Fantastic product, by the way!

EDIT: Seems this event does not fire but I realize now that it is the Layout Panel Touch Event that I need to listen for.
 
Last edited:

Informatix

Expert
Licensed User
Longtime User
Has anyone an idea how to get the ULV_ItemTouch event to register?
is there a setting in the setup of the ULV perhaps?
I don't see it and I get no response at all to:
B4X:
Sub ULV_ItemTouch(Position As Int, Action As Int, X As Int, Y As Int, TouchedPanel As Panel)

Fantastic product, by the way!

Hello,

Just add the event. There's nothing more to do. For example, add this to the tutorial #1 and look at the log window when you touch the item:
B4X:
Sub ULV_ItemTouch(Position As Int, Action As Int, X As Int, Y As Int, TouchedPanel As Panel)
   Log(Position & " " & Action)
End Sub
For a cell, the corresponding event is CellTouch.
 

jimmyF

Active Member
Licensed User
Longtime User
Just add the event. There's nothing more to do.

I had done that. But it never fired. I had a label in the Layout panel that was really what I wanted to read and it was getting the clicks and touch events.
The Label Touch event does not pass through to the ULV, of course.
It was the Label Touch Event that I needed to listen for.

By the way, I tried the Gesture Detector on the label to read a DoubleTap but I had no way to get the ID or Position from the Gesture DoubleTap Sub.
I learned that I could create a DoubleTap sequence directly on the label Click event and retrieve the Sender in code (storing the ID in the .tag property).

Hope this makes sense.

And it is all working well, thanks.

-j
 

ilan

Expert
Licensed User
Longtime User
I had done that. But it never fired. I had a label in the Layout panel that was really what I wanted to read and it was getting the clicks and touch events.
The Label Touch event does not pass through to the ULV, of course.
It was the Label Touch Event that I needed to listen for.

By the way, I tried the Gesture Detector on the label to read a DoubleTap but I had no way to get the ID or Position from the Gesture DoubleTap Sub.
I learned that I could create a DoubleTap sequence directly on the label Click event and retrieve the Sender in code (storing the ID in the .tag property).

Hope this makes sense.

And it is all working well, thanks.

-j

Are u initializing the ulv with event name "ULV"?
 

jimmyF

Active Member
Licensed User
Longtime User

jimmyF

Active Member
Licensed User
Longtime User
I am so sorry. My mistake. I had tried the ItemTouch not the Touch event.

The Touch event works fine but it does not do what I wanted it to do. It does not provide a means to determine the ID or Position of the Item.
Originally, I was trying to get the ID or Position from the ItemTouch event, which does not fire, for some reason.

So now I get the label contained in the layout and in the label_click event I read the Sender and get its tag property added in the ContentFiller sub.
It works.

Thanks for you help
 
Top