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:

Alexander Stolte

Expert
Licensed User
Longtime User
You have no idea what's possible with ULV

yeah its nice, but my solution is programmed in a few hours and it is a raw prototype.

You can give me tips so that my solution will be as good as yours :p

And yes, i have really, no idea what with B4A everything is possible, I'm member since December :eek:
 

Vincenzo Fabiano

Member
Licensed User
Longtime User
I have this error on load list:

B4X:
DispatchDraw failed: NPE (Out of Memory)
java.lang.Exception: Sub ulv_outofmemoryerror was not found.
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:192)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
    at flm.b4a.ultimatelistview.UltimateListView.dispatchDraw(SourceFile:527)
    at android.view.View.draw(View.java:17192)
    at android.widget.AbsListView.draw(AbsListView.java:4337)
    at android.view.View.updateDisplayListIfDirty(View.java:16171)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3711)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3691)
    at android.view.View.updateDisplayListIfDirty(View.java:16134)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:648)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:654)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:762)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2800)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2608)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2215)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6350)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
    at android.view.Choreographer.doCallbacks(Choreographer.java:686)
    at android.view.Choreographer.doFrame(Choreographer.java:621)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6236)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
java.lang.Exception: Sub ulv_outofmemoryerror was not found.
 

johnB

Active Member
Licensed User
Longtime User
Hello,

You have two examples demonstrating this: Demo_DBTable (small database) and Demo_WordDBTable (huge database). The right solution depends on the size of your SQLite database.
When you edit a cell, send the changes to the database with an update query.
Hi
There 47 pages here, where can I find the 2 DB Demo's. Also when you first released this i'm sure that there was some kind of demo displaying the different types of lists, is that still available
 

clarionero

Active Member
Licensed User
Longtime User

johnB

Active Member
Licensed User
Longtime User
Thanks for the replies
Can I ask a couple of questions before I purchase
1. If I want TAB pages do I use the standard B4A Tabs or does ULV have a Tab pages method.
2.Can I display a Master record (like an Invoice Header) followed by detail Line Items, then Master and detail again etc. Obviously the detail has a different layout and size (depth) than the Master. Would that be like your Sections Demo - if so can you have multiple lines in the 1st (header) Line (Countries in your example)
3. Can they scroll both vertically and horizontally

Apologizes if these question have been answered in the previous 47 pages - I started to go thru them but so much was detail and irrelevant to me
 
Top