[NUI] Fix issue item is not unrealized after insertion.
authorEverLEEst(SangHyeon Lee) <sh10233.lee@samsung.com>
Tue, 25 Oct 2022 07:09:35 +0000 (16:09 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Thu, 10 Nov 2022 01:25:11 +0000 (10:25 +0900)
src/Tizen.NUI.Components/Controls/RecyclerView/Layouter/LinearLayouter.cs
test/NUITizenGallery/Examples/CollectionViewTest/CollectionViewObservableTestPage.xaml
test/NUITizenGallery/Examples/CollectionViewTest/CollectionViewObservableTestPage.xaml.cs

index 8a76a3a..0aa5c9e 100755 (executable)
@@ -401,7 +401,6 @@ namespace Tizen.NUI.Components
             {
                 if (item.Index < FirstVisible || item.Index > LastVisible)
                 {
-                    //Console.WriteLine("[NUI] Unrealize{0}!", item.Index);
                     unrealizedItems.Add(item);
                     colView.UnrealizeItem(item);
                 }
@@ -684,6 +683,18 @@ namespace Tizen.NUI.Components
                 }
             }
 
+            if (startIndex <= FirstVisible)
+            {
+                FirstVisible++;
+                LastVisible++;
+            }
+            else if (startIndex > FirstVisible && startIndex <= LastVisible)
+            {
+                LastVisible++;
+            }
+
+            if (FirstVisible > colView.InternalItemSource.Count - 1) FirstVisible = colView.InternalItemSource.Count -1;
+            if (LastVisible > colView.InternalItemSource.Count - 1) LastVisible = colView.InternalItemSource.Count -1;
 
             float scrollPosition = PrevScrollPosition;
 
@@ -851,6 +862,19 @@ namespace Tizen.NUI.Components
                 }
             }
 
+            if (startIndex <= FirstVisible)
+            {
+                FirstVisible = FirstVisible + count;
+                LastVisible = LastVisible + count;
+            }
+            else if (startIndex > FirstVisible && startIndex <= LastVisible)
+            {
+                LastVisible = LastVisible + count;
+            }
+
+            if (FirstVisible > colView.InternalItemSource.Count - 1) FirstVisible = colView.InternalItemSource.Count -1;
+            if (LastVisible > colView.InternalItemSource.Count - 1) LastVisible = colView.InternalItemSource.Count -1;
+
             // Position Adjust
             float scrollPosition = PrevScrollPosition;
             /*
@@ -980,6 +1004,20 @@ namespace Tizen.NUI.Components
             }
             VisibleItems.Remove(targetItem);
 
+
+            if (startIndex <= FirstVisible)
+            {
+                FirstVisible--;
+                LastVisible--;
+            }
+            else if (startIndex > FirstVisible && startIndex <= LastVisible)
+            {
+                LastVisible--;
+            }
+
+            if (FirstVisible < 0) FirstVisible = 0;
+            if (LastVisible < 0) LastVisible = 0;
+
             // Position Adjust
             float scrollPosition = PrevScrollPosition;
             /*
@@ -1089,6 +1127,19 @@ namespace Tizen.NUI.Components
             VisibleItems.RemoveAll(unrealizedItems.Contains);
             unrealizedItems.Clear();
 
+            if (startIndex <= FirstVisible)
+            {
+                FirstVisible = FirstVisible - count;
+                LastVisible = LastVisible - count;
+            }
+            else if (startIndex > FirstVisible && startIndex <= LastVisible)
+            {
+                LastVisible = LastVisible - count;
+            }
+
+            if (FirstVisible < 0) FirstVisible = 0;
+            if (LastVisible < 0) LastVisible = 0;
+
             // Position Adjust
             float scrollPosition = PrevScrollPosition;
             /*
@@ -1159,6 +1210,48 @@ namespace Tizen.NUI.Components
                 }
             }
 
+            if (fromPosition > FirstVisible)
+            {
+                if (toPosition > LastVisible)
+                {
+                    FirstVisible--;
+                    LastVisible--;
+                }
+                else if (toPosition > FirstVisible && toPosition <= LastVisible)
+                {
+                    LastVisible--;
+                }
+            }
+            else if (fromPosition >= FirstVisible && fromPosition <= LastVisible)
+            {
+                if (toPosition < FirstVisible)
+                {
+                    FirstVisible++;
+                }
+                else if (toPosition > LastVisible)
+                {
+                    LastVisible--;
+                }
+            }
+            else if (fromPosition > LastVisible)
+            {
+                if (toPosition <= FirstVisible)
+                {
+                    FirstVisible++;
+                    LastVisible++;
+                }
+                else if (toPosition > FirstVisible && toPosition <= LastVisible)
+                {
+                    LastVisible++;
+                }
+            }
+
+            if (FirstVisible < 0) FirstVisible = 0;
+            if (LastVisible < 0) LastVisible = 0;
+            if (FirstVisible > colView.InternalItemSource.Count - 1) FirstVisible = colView.InternalItemSource.Count -1;
+            if (LastVisible > colView.InternalItemSource.Count - 1) LastVisible = colView.InternalItemSource.Count -1;
+
+
             if (IsHorizontal) colView.ContentContainer.SizeWidth = ScrollContentSize;
             else colView.ContentContainer.SizeHeight = ScrollContentSize;
 
@@ -1275,6 +1368,14 @@ namespace Tizen.NUI.Components
                     }
                 }
             }
+            // FIXME!! Unraelize All and reset First/Last Visible
+            foreach (RecyclerViewItem item in VisibleItems)
+            {
+                colView.UnrealizeItem(item);
+            }
+            VisibleItems.Clear();
+            FirstVisible = 0;
+            LastVisible = 0;
 
             // Position Adjust
             float scrollPosition = PrevScrollPosition;
index d508b98..8c7766c 100755 (executable)
@@ -30,6 +30,7 @@
                 </View.Layout>
 
                 <Button x:Name="AddItem" Text="Add" WidthSpecification="200" HeightSpecification="80" Clicked="AddItemClicked"/>
+                <Button x:Name="InsertItem" Text="Insert" WidthSpecification="200" HeightSpecification="80" Clicked="InsertItemClicked"/>
                 <Button x:Name="RemoveItem" Text="Remove" WidthSpecification="200" HeightSpecification="80"  Clicked="RemoveItemClicked"/>
                 <Button x:Name="RemoveAllItems" Text="Remove All" WidthSpecification="300" HeightSpecification="80"  Clicked="RemoveAllClicked"/>
             </View>
index 59f13c2..ce8ff88 100644 (file)
@@ -38,6 +38,13 @@ namespace NUITizenGallery
             addCount++;
         }
 
+        void InsertItemClicked(object sender, ClickedEventArgs e)
+        {
+            // Add item in the source
+            source.Insert(3, new TestItem(addCount, $"Test Item [{addCount}]", Color.Red));
+            addCount++;
+        }
+
         void RemoveItemClicked(object sender, ClickedEventArgs e)
         {
             // Removed selected item from the source