Skip to content

Commit

Permalink
RecyclerView, recycledViewPool 的实现
Browse files Browse the repository at this point in the history
  • Loading branch information
sunnyswag committed Feb 26, 2023
1 parent 046541a commit d1c822b
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.recycledviewpooldemo

import android.util.Log
import androidx.recyclerview.widget.RecyclerView

class RecycledViewPoolTest: RecyclerView.RecycledViewPool() {

override fun putRecycledView(scrap: RecyclerView.ViewHolder?) {
super.putRecycledView(scrap)
Log.d(TAG, "putRecycledView: scrap.hashCode(): ${scrap?.hashCode()}")
}

override fun getRecycledView(viewType: Int): RecyclerView.ViewHolder? {
return super.getRecycledView(viewType).also {
Log.d(TAG, "getRecycledView: it.hashCode(): ${it?.hashCode()}")
}
}

override fun clear() {
Log.d(TAG, "clear: ")
super.clear()
}

companion object {
private const val TAG = "RecycledViewPoolTest"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.recycledviewpooldemo.adapter.RecyclerViewAdapter
import com.example.recycledviewpooldemo.databinding.ViewpagerItemBinding
import com.example.recycledviewpooldemo.viewmodel.RecyclerViewItemViewModel

class ViewPagerItemFragment: Fragment() {

lateinit var binding: ViewpagerItemBinding
private val viewModel by lazy {
ViewModelProvider(requireActivity()).get(RecyclerViewItemViewModel::class.java)
}

override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -25,12 +30,18 @@ class ViewPagerItemFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.rvRoot.apply {
setRecycledViewPool(viewModel.viewPool)
adapter = RecyclerViewAdapter()
layoutManager = LinearLayoutManager(context)
setItemViewCacheSize(0)
}
}

override fun onDestroy() {
super.onDestroy()
viewModel.clearViewPool()
}

companion object {
private const val TAG = "ViewPagerItemFragment"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.example.recycledviewpooldemo.viewmodel

import androidx.lifecycle.ViewModel
import com.example.recycledviewpooldemo.RecycledViewPoolTest

class RecyclerViewItemViewModel: ViewModel() {

var viewPool = RecycledViewPoolTest().apply {
setMaxRecycledViews(0, 10)
}
private set

fun clearViewPool() {
viewPool.clear()
}

override fun onCleared() {
super.onCleared()
viewPool.clear()
}
}

0 comments on commit d1c822b

Please sign in to comment.