浏览代码

Fix crashes introduced yesterday

len 8 年之前
父节点
当前提交
4200409f79

+ 3 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryFragment.kt

@@ -91,7 +91,9 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
             }
         }
 
-        (recycler.layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
+        // This crashes when opening a manga after changing categories, but then viewholders aren't
+        // recycled between pages. It may be fixed if this fragment is replaced with a custom view.
+        //(recycler.layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
         recycler.recycledViewPool = libraryFragment.pool
         recycler.setHasFixedSize(true)
         recycler.adapter = adapter

+ 12 - 9
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryFragment.kt

@@ -94,7 +94,10 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
     /**
      * A pool to share view holders between all the registered categories (fragments).
      */
-    var pool = RecyclerView.RecycledViewPool()
+    var pool = RecyclerView.RecycledViewPool().apply { setMaxRecycledViews(0, 20) }
+        private set(value) {
+            field = value.apply { setMaxRecycledViews(0, 20) }
+        }
 
     private var numColumnsSubscription: Subscription? = null
 
@@ -127,8 +130,8 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
     override fun onCreate(savedState: Bundle?) {
         super.onCreate(savedState)
         setHasOptionsMenu(true)
-        isFilterDownloaded = presenter.preferences.filterDownloaded().get() as Boolean
-        isFilterUnread = presenter.preferences.filterUnread().get() as Boolean
+        isFilterDownloaded = preferences.filterDownloaded().get() as Boolean
+        isFilterUnread = preferences.filterUnread().get() as Boolean
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedState: Bundle?): View? {
@@ -142,7 +145,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
         view_pager.adapter = adapter
         view_pager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
             override fun onPageSelected(position: Int) {
-                presenter.preferences.lastUsedCategory().set(position)
+                preferences.lastUsedCategory().set(position)
             }
         })
         tabs.setupWithViewPager(view_pager)
@@ -152,7 +155,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
             query = savedState.getString(QUERY_KEY)
             presenter.searchSubject.onNext(query)
         } else {
-            activeCategory = presenter.preferences.lastUsedCategory().getOrDefault()
+            activeCategory = preferences.lastUsedCategory().getOrDefault()
         }
 
         numColumnsSubscription = getColumnsPreferenceForCurrentOrientation().asObservable()
@@ -218,7 +221,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
                 // Change unread filter status.
                 isFilterUnread = !isFilterUnread
                 // Update settings.
-                presenter.preferences.filterUnread().set(isFilterUnread)
+                preferences.filterUnread().set(isFilterUnread)
                 // Apply filter.
                 onFilterCheckboxChanged()
             }
@@ -226,7 +229,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
                 // Change downloaded filter status.
                 isFilterDownloaded = !isFilterDownloaded
                 // Update settings.
-                presenter.preferences.filterDownloaded().set(isFilterDownloaded)
+                preferences.filterDownloaded().set(isFilterDownloaded)
                 // Apply filter.
                 onFilterCheckboxChanged()
             }
@@ -235,8 +238,8 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
                 isFilterUnread = false
                 isFilterDownloaded = false
                 // Update settings.
-                presenter.preferences.filterUnread().set(isFilterUnread)
-                presenter.preferences.filterDownloaded().set(isFilterDownloaded)
+                preferences.filterUnread().set(isFilterUnread)
+                preferences.filterDownloaded().set(isFilterDownloaded)
                 // Apply filter
                 onFilterCheckboxChanged()
             }

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/widget/AutofitRecyclerView.kt

@@ -37,8 +37,8 @@ class AutofitRecyclerView @JvmOverloads constructor(context: Context, attrs: Att
     override fun onMeasure(widthSpec: Int, heightSpec: Int) {
         super.onMeasure(widthSpec, heightSpec)
         if (spanCount == 0 && columnWidth > 0) {
-            val spanCount = Math.max(1, measuredWidth / columnWidth)
-            manager.spanCount = spanCount
+            val count = Math.max(1, measuredWidth / columnWidth)
+            spanCount = count
         }
     }