Skip to content

Instantly share code, notes, and snippets.

@PamilerinId
Created March 24, 2020 09:58
Show Gist options
  • Save PamilerinId/5cd72277c237fa05deb5e2eb07cafb85 to your computer and use it in GitHub Desktop.
Save PamilerinId/5cd72277c237fa05deb5e2eb07cafb85 to your computer and use it in GitHub Desktop.
Collections Fragment.kt
package ng.chaka.android.home.tabs.explore.ui
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.widget.Toast
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import javax.inject.Inject
import kotlinx.android.synthetic.main.collections.*
import ng.chaka.android.R
import ng.chaka.android.core.android.BaseFragment
import ng.chaka.android.core.android.Resource
import ng.chaka.android.core.android.Status
import ng.chaka.android.core.android.widget.EndlessRecyclerViewScrollListener
import ng.chaka.android.core.hide
import ng.chaka.android.core.show
import ng.chaka.android.home.tabs.explore.db.Collections
class CollectionsFragment : BaseFragment(R.layout.collections) {
@Inject
lateinit var factory: ViewModelProvider.Factory
private val viewModel by lazy {
ViewModelProvider(this, factory)[CollectionsViewModel::class.java]
}
private lateinit var adapter: CollectionsAdapter
private var isLoading = false
private val limit = 10
lateinit var layoutManager: LinearLayoutManager
private val exploreViewModel by lazy {
ViewModelProvider(activity!!, factory)[ExploreViewModel::class.java]
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) =
super.onViewCreated(view, savedInstanceState).also {
setupAdapter()
addObservers()
swipeRefresh.setOnRefreshListener {
viewModel.nextPage = 0
viewModel.refreshCollections(true)
}
}
private fun setupAdapter() {
adapter = CollectionsAdapter(requireContext())
recyclerView.adapter = adapter
viewModel.refreshCollections()
}
private fun addObservers() {
recyclerView.adapter = adapter
val endlessRecyclerViewScrollListener = object: EndlessRecyclerViewScrollListener(recyclerView.layoutManager as LinearLayoutManager) {
override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) {
viewModel.nextPage = page
viewModel.refreshCollections()
//// val visibleItems = view.childCount
// val pastVisibleItem = view.if (view != null) {
// if (view.childCount < 10) {
// viewModel.nextPage = page
// viewModel.refreshCollections()
//// adapter.notifyDataSetChanged()
// }
// }
}
}
recyclerView.addOnScrollListener(endlessRecyclerViewScrollListener)
viewModel.collectionsLiveData.observe(viewLifecycleOwner, Observer { resource ->
swipeRefresh.isRefreshing = when (resource.status) {
Status.SUCCESS -> {
showCollections(resource)
false
}
Status.LOADING -> {
true
}
Status.ERROR -> {
Toast.makeText(
requireContext(),
resource.message ?: getString(R.string.generic_error),
Toast.LENGTH_SHORT
).show()
false
}
}
})
}
private fun showCollections(resource: Resource<List<Collections>>) {
val data = resource.data ?: return
// adapter.collectionsList = data
// adapter.notifyDataSetChanged()
if (data.isEmpty()) {
noDataTextView.show()
recyclerView.hide()
} else {
noDataTextView.hide()
recyclerView.show()
adapter.collectionsList = data
}
}
fun <T, R> List<T>.minus(elements: List<T>, selector: (T) -> R?)
= filter{ t -> elements.none{ selector(it) == selector(t) } }
companion object {
fun newInstance(): CollectionsFragment {
return CollectionsFragment()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment