B4A Library [B4X] CLVSwipe - xCustomListView Swipe actions and pull to refresh

Status
Not open for further replies.
CLVSwipe is a class that adds "swipe actions" and pull to refresh features to the standard xCustomListView library.

It is compatible with B4A and B4i (currently not with B4J).
Both features are optional.


Using it is simple:

1. Add the class to your project. It depends on XUI, xCustomListView and ViewsEx v1.30+.
2. Initialize Swipe and pass the CustomListView.
3. In B4i, call Swipe.Resize when the page is resized.

Adding action commands:

- Set the action colors:
Code: Copy
Swipe.ActionColors = CreateMap("Delete": xui.Color_Red, "Do Something Else": xui.Color_Green, _
       "Action 1": xui.Color_Red, "Action 2": xui.Color_Blue, "Action 3": xui.Color_Yellow)
- Create the items values with Swipe.CreateItemValue:
Code: Copy
CustomListView1.AddTextItem($"Important item ${i} ..."$, Swipe.CreateItemValue("", Array("Delete", "Do Something Else")))
- Handle the ActionClicked event:
Code: Copy
Sub Swipe_ActionClicked (Index As Int, ActionText As String)

Pull to refresh:

- Create the PullToRefreshPanel panel. This is the panel that appears when the user pulls the list.
- Set it with Swipe.PullToRefreshPanel.
- Handle the RefreshRequested event. Make sure to call Swipe.RefreshCompleted when done.
- In B4i you need to call Swipe.ScrollChanged from the ScrollChanged event.

B4A and B4i projects are attached. Note that the class module is identical in both projects.

Updates

V1.14 - Fixes an issue with crashes on low resolution devices.
V1.13 - New ScrollingEnabled property - enables or disables scrolling.
V1.12 - Fixes an issue with the Resize method.
V1.11 - Fixes an issue with horizontal swipes when the list is empty.
v1.10 - Adds pull to refresh feature.

The class is included inside the project.
 

Attachments

Last edited:
Awesome.
Thank you

Is it possible to define Left or Right swipe event independently?
 
Ok

Thank you
 
Great! Thanks by this improvement! , is possible add images next to row data?
 
Last edited:
Apologies, I wasn't very clear. I meant that if the user is already at the top of the list (for example they've just opened the app) swiping up does nothing (at least on my device). I was wondering if it would be possible to change that.
 
At least in my case, some layout components as ProgressBar are masked (hidden) by the clv component when Swipe module is initialized. My solution is to use the BringToFront method such that:

Code: Copy
ProgressBar1.BringToFront

Is there any other more elegant solution?

Thanks in advance!
 
Please upload a small example that demonstrates the issue.

Ok, attachment. It is a simple copy of the original example 'B4A CLVSwipe' that adds a single Progressbar2 component to the main layout.

I have simply included this line of code in the Main activity module:

Code: Copy
ProgressBar2.BringToFront

It also happens with panels.
 

Attachments

This is expected as a new panel is added and CLV is added to the new panel. Your solution looks very elegant to me. You can also send CLVSwipe to the back if you prefer:

Ok.
I prefer your alternative, I think it's simpler.

Thank you.
 
Status
Not open for further replies.
Back
Top