Recycle view holders in library. Format fixes

This commit is contained in:
len 2016-07-30 20:21:01 +02:00
parent 31b1b83606
commit fbd2235a51
5 changed files with 26 additions and 25 deletions

View file

@ -85,10 +85,9 @@ class LibraryCategoryAdapter(val fragment: LibraryCategoryFragment) :
*/ */
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LibraryHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LibraryHolder {
//depending on preferences, display a list or display a grid //depending on preferences, display a list or display a grid
if(parent.id == R.id.library_list) { if (parent.id == R.id.library_list) {
val view = parent.inflate(R.layout.item_library_list) val view = parent.inflate(R.layout.item_library_list)
return LibraryListHolder(view, this, fragment) return LibraryListHolder(view, this, fragment)
} else { } else {
val view = parent.inflate(R.layout.item_catalogue_grid).apply { val view = parent.inflate(R.layout.item_catalogue_grid).apply {
card.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, coverHeight) card.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, coverHeight)

View file

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.library
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater import android.view.LayoutInflater
@ -91,8 +92,6 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_library_category, container, false) return inflater.inflate(R.layout.fragment_library_category, container, false)
} }
override fun onViewCreated(view: View, savedState: Bundle?) { override fun onViewCreated(view: View, savedState: Bundle?) {
@ -100,14 +99,16 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
//set up grid //set up grid
recycler.setHasFixedSize(true) recycler.setHasFixedSize(true)
(recycler.layoutManager as GridLayoutManager).recycleChildrenOnDetach = true
recycler.recycledViewPool = libraryFragment.pool
recycler.adapter = adapter recycler.adapter = adapter
//set up list //set up list
library_list.setHasFixedSize(true) library_list.setHasFixedSize(true)
library_list.adapter = adapter
library_list.layoutManager = LinearLayoutManager(activity) library_list.layoutManager = LinearLayoutManager(activity)
library_list.recycledViewPool = libraryFragment.pool
(library_list.layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
library_list.adapter = adapter
if (libraryFragment.actionMode != null) { if (libraryFragment.actionMode != null) {
setSelectionMode(FlexibleAdapter.MODE_MULTI) setSelectionMode(FlexibleAdapter.MODE_MULTI)
@ -119,19 +120,19 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
// Set again the adapter to recalculate the covers height // Set again the adapter to recalculate the covers height
.subscribe { recycler.adapter = adapter } .subscribe { recycler.adapter = adapter }
searchSubscription = libraryPresenter.searchSubject?.subscribe { text -> searchSubscription = libraryPresenter.searchSubject.subscribe { text ->
adapter.searchText = text adapter.searchText = text
adapter.updateDataSet() adapter.updateDataSet()
} }
toggleViewSubscription = preferences.libraryAsList().asObservable().subscribe {onViewModeChange(it)} toggleViewSubscription = preferences.libraryAsList().asObservable()
.subscribe { onViewModeChange(it) }
if(libraryPresenter.displayAsList != displayAsList) { if (libraryPresenter.displayAsList != displayAsList) {
library_switcher.showNext() library_switcher.showNext()
displayAsList = libraryPresenter.displayAsList displayAsList = libraryPresenter.displayAsList
} }
library_switcher.inAnimation = AnimationUtils.loadAnimation(activity, android.R.anim.fade_in) library_switcher.inAnimation = AnimationUtils.loadAnimation(activity, android.R.anim.fade_in)
library_switcher.outAnimation = AnimationUtils.loadAnimation(activity, android.R.anim.fade_out) library_switcher.outAnimation = AnimationUtils.loadAnimation(activity, android.R.anim.fade_out)
@ -176,11 +177,8 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
libraryMangaSubscription = libraryPresenter.libraryMangaSubject libraryMangaSubscription = libraryPresenter.libraryMangaSubject
?.subscribe { onNextLibraryManga(it) } .subscribe { onNextLibraryManga(it) }
} }
override fun onPause() { override fun onPause() {
@ -310,7 +308,7 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
fun onViewModeChange(isList: Boolean) { fun onViewModeChange(isList: Boolean) {
//do nothing if the display does not need to change //do nothing if the display does not need to change
if(isList == displayAsList) return if (isList == displayAsList) return
//else change view and display mode //else change view and display mode
library_switcher.showNext() library_switcher.showNext()

View file

@ -6,6 +6,7 @@ import android.os.Bundle
import android.support.design.widget.TabLayout import android.support.design.widget.TabLayout
import android.support.v4.view.ViewPager import android.support.v4.view.ViewPager
import android.support.v7.view.ActionMode import android.support.v7.view.ActionMode
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.SearchView import android.support.v7.widget.SearchView
import android.view.* import android.view.*
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -86,6 +87,11 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
*/ */
var isFilterUnread = false var isFilterUnread = false
/**
* A pool to share view holders between all the registered categories (fragments).
*/
val pool = RecyclerView.RecycledViewPool()
companion object { companion object {
/** /**
* Key to change the cover of a manga in [onActivityResult]. * Key to change the cover of a manga in [onActivityResult].
@ -138,7 +144,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
if (savedState != null) { if (savedState != null) {
activeCategory = savedState.getInt(CATEGORY_KEY) activeCategory = savedState.getInt(CATEGORY_KEY)
query = savedState.getString(QUERY_KEY) query = savedState.getString(QUERY_KEY)
presenter.searchSubject?.onNext(query) presenter.searchSubject.onNext(query)
} else { } else {
activeCategory = presenter.preferences.lastUsedCategory().getOrDefault() activeCategory = presenter.preferences.lastUsedCategory().getOrDefault()
} }
@ -311,7 +317,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
view_pager.post { if (isAdded) tabs.setScrollPosition(view_pager.currentItem, 0f, true) } view_pager.post { if (isAdded) tabs.setScrollPosition(view_pager.currentItem, 0f, true) }
// Send the manga map to child fragments after the adapter is updated. // Send the manga map to child fragments after the adapter is updated.
presenter.libraryMangaSubject?.onNext(LibraryMangaEvent(mangaMap)) presenter.libraryMangaSubject.onNext(LibraryMangaEvent(mangaMap))
} }
/** /**

View file

@ -39,12 +39,12 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
/** /**
* Search query of the library. * Search query of the library.
*/ */
val searchSubject: BehaviorSubject<String>? = BehaviorSubject.create<String>() val searchSubject: BehaviorSubject<String> = BehaviorSubject.create<String>()
/** /**
* Subject to notify the library's viewpager for updates. * Subject to notify the library's viewpager for updates.
*/ */
val libraryMangaSubject: BehaviorSubject<LibraryMangaEvent>? = BehaviorSubject.create<LibraryMangaEvent>() val libraryMangaSubject: BehaviorSubject<LibraryMangaEvent> = BehaviorSubject.create<LibraryMangaEvent>()
/** /**
* Database. * Database.
@ -95,9 +95,7 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
start(GET_LIBRARY) start(GET_LIBRARY)
} }
add(preferences.libraryAsList().asObservable().subscribe { setDisplayMode(it) })
add(preferences.libraryAsList().asObservable().subscribe{setDisplayMode(it)})
} }
/** /**