Jelajahi Sumber

Fix library not being updated

inorichi 7 tahun lalu
induk
melakukan
d94dc68830

+ 15 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryAdapter.kt

@@ -26,6 +26,8 @@ class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPa
             }
         }
 
+    private var boundViews = arrayListOf<View>()
+
     /**
      * Creates a new view for this adapter.
      *
@@ -45,6 +47,7 @@ class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPa
      */
     override fun bindView(view: View, position: Int) {
         (view as LibraryCategoryView).onBind(categories[position])
+        boundViews.add(view)
     }
 
     /**
@@ -55,6 +58,7 @@ class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPa
      */
     override fun recycleView(view: View, position: Int) {
         (view as LibraryCategoryView).onRecycle()
+        boundViews.remove(view)
     }
 
     /**
@@ -85,4 +89,15 @@ class LibraryAdapter(private val controller: LibraryController) : RecyclerViewPa
         return if (index == -1) POSITION_NONE else index
     }
 
+    /**
+     * Called when the view of this adapter is being destroyed.
+     */
+    fun onDestroy() {
+        for (view in boundViews) {
+            if (view is LibraryCategoryView) {
+                view.unsubscribe()
+            }
+        }
+    }
+
 }

+ 2 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt

@@ -124,12 +124,11 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
     fun onRecycle() {
         adapter.setItems(emptyList())
         adapter.clearSelection()
-        subscriptions.clear()
+        unsubscribe()
     }
 
-    override fun onDetachedFromWindow() {
+    fun unsubscribe() {
         subscriptions.clear()
-        super.onDetachedFromWindow()
     }
 
     /**

+ 1 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt

@@ -164,6 +164,7 @@ class LibraryController(
     }
 
     override fun onDestroyView(view: View) {
+        adapter?.onDestroy()
         adapter = null
         actionMode = null
         tabsVisibilitySubscription?.unsubscribe()