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
Hello All,

Just starting off with UltimateListView and have run into somewhat strange problems:

  • I modified the Gallery_demo sample so that the activity 'Assets' starts in portrait instead of landscape (done in manifest). I get a strange flickering behaviour on my device (Nexus 5X - Android now updated to 7 but issue was there with 6 as well). This happens when I click on a row to reveal the expanded item. Additionally, not all images are loaded from the assets folder with some rows displaying an error message. This works in the emulator though the layout code that places the expanded image below the main row item (using OriginalHeight) does not work when used in portrait and the image gets shown after a lot of space given to padding.
  • In debug mode, the emulator and device both do not work and just shows the error image with a lot of flickering, which looks like it is redrawing the entire list. I can see FileNotFoundException. Is there a different way to access assets in debug now? But what about the massive flickering?

Will appreciate any tip and advice.

Haris.
Debug mode is incompatible with ULV.
And please note that support is only provided by email.
 

MarcoRome

Expert
Licensed User
Longtime User
Hi all. I have this ULV with editText that i can fill in runtime, so after that customer insert example:
aaaa
bbbb
cccc

is possible reading this edittext ?

B4X:
Dim totale As Int =    ulv.NumberOfItems
    For i = 0 To totale
        ???
    Next

upload_2016-10-17_19-28-9.png


Thank you
Regards
Marco
 

Haris Hafeez

Active Member
Licensed User
Longtime User
Hi all. I have this ULV with editText that i can fill in runtime, so after that customer insert example:
aaaa
bbbb
cccc

is possible reading this edittext ?

B4X:
Dim totale As Int =    ulv.NumberOfItems
    For i = 0 To totale
        ???
    Next

View attachment 49101

Thank you
Regards
Marco
You should have a reference to this data already as that's how you will populate the views contained in ULV. Do you not have a List object (perhaps in Globals) where you hold the values?
 

MarcoRome

Expert
Licensed User
Longtime User
You should have a reference to this data already as that's how you will populate the views contained in ULV. Do you not have a List object (perhaps in Globals) where you hold the values?
I explain better.
These data will be entered by the user at runtime, so I can not know before values.
The same are inserted empty, initially, it will be filled out by the user at a later time. I would have only one cycle (or other) where you can select the user submitted values

 

Haris Hafeez

Active Member
Licensed User
Longtime User
I explain better.
These data will be entered by the user at runtime, so I can not know before values.
The same are inserted empty, initially, it will be filled out by the user at a later time. I would have only one cycle (or other) where you can select the user submitted values

When the user has finished entering these values, where do you store it? I'd imagine you will have a data structure (custom type) and have a list of these objects stored in memory or perhaps you commit them to the DB? In either case, you have a 'store' where you get the values from and that's what I was referring to above.
 

MarcoRome

Expert
Licensed User
Longtime User
When the user has finished entering these values, where do you store it? I'd imagine you will have a data structure (custom type) and have a list of these objects stored in memory or perhaps you commit them to the DB? In either case, you have a 'store' where you get the values from and that's what I was referring to above.
Is sufficient map.
But how do get the value ?
 

shashkiranr

Active Member
Licensed User
Longtime User
If possible, use something like the below code. Store the output corresponding to each edittext in a map. Call this sub from every edittext_textchanged sub.

B4X:
Sub StoreInput(EditTextTag as String, input as String)
       Select EditTextTag
            case "et1"
                In_Some_Map = input
            case "et2"
                In_Some_Map = input
       End Select
End Sub

Best,
SK
 

AbbasMohammed

Member
Licensed User
Longtime User
Hello there,
I have the problem , when I tried to run code with ( ULV.SelectWithClick = True) I couldn't and similar code , my ulv version is 3.9 !!!
 

Informatix

Expert
Licensed User
Longtime User
Hello,

Is it possible to achieve this with ULV?
View attachment 49986
You can create a grid as the example shown above, but not two columns with different heights for each column. The PinterestListView uses in fact two listviews that are synchronized when scrolling. I will look at how they are synchronized to see if I can reproduce that easily with ULV.
 

Dey

Active Member
Licensed User
Longtime User
Hello
a question
UltimateListview believe that interest to all,
SetActivityAttribute (Main, Android: hardwareAccelerated, "true") is recommended for every activity that has UltmateListView?
Thank you
 
Top