diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListViewProxy.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListViewProxy.java index 79b5769f8f8..f3b88eaf0cf 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListViewProxy.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListViewProxy.java @@ -631,8 +631,15 @@ public void handleMarkers() return; } - final ListItemProxy[] items = - new ListItemProxy[] { listView.getFirstVisibleItem(), listView.getLastVisibleItem()}; + final ArrayList items = new ArrayList<>(); + final LinearLayoutManager lm = listView.getLayoutManager(); + final int firstVisibleItemPos = lm.findFirstVisibleItemPosition(); + final int lastVisibleItemPos = lm.findLastVisibleItemPosition(); + + // ideally markers should be triggered for all visible items between first and last visible ones + for (int i = firstVisibleItemPos; i <= lastVisibleItemPos; i++) { + items.add(listView.getVisibleItemAt(i)); + } for (final ListItemProxy item : items) { if (item != null) { diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java index e4cee03582b..2efb68fd889 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java @@ -571,6 +571,18 @@ public ListItemProxy getFirstVisibleItem() return null; } + public ListItemProxy getVisibleItemAt(int index) + { + final View itemView = getLayoutManager().findViewByPosition(index); + + if (itemView == null) { + return null; + } + + // Obtain list item proxy + return ((ListViewHolder) recyclerView.getChildViewHolder(itemView)).getProxy(); + } + /** * Obtain last visible list item proxy. *