From d104ccbaeb2a0e596b0ff9f2c42f00a7d17d0906 Mon Sep 17 00:00:00 2001 From: "Kevin T. Coughlin" <706967+KevinTCoughlin@users.noreply.github.com> Date: Thu, 28 Nov 2024 16:38:42 -0800 Subject: [PATCH] Refactor --- .../jamoka/fragment/BinderRecyclerFragment.kt | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/common-android/src/main/java/com/cascadiacollections/jamoka/fragment/BinderRecyclerFragment.kt b/common-android/src/main/java/com/cascadiacollections/jamoka/fragment/BinderRecyclerFragment.kt index a316c8a0..1bde8695 100644 --- a/common-android/src/main/java/com/cascadiacollections/jamoka/fragment/BinderRecyclerFragment.kt +++ b/common-android/src/main/java/com/cascadiacollections/jamoka/fragment/BinderRecyclerFragment.kt @@ -14,30 +14,47 @@ import com.cascadiacollections.jamoka.R * Generic fragment with RecyclerView and SwipeRefreshLayout integration. * Supports binding adapters, layout managers, and item selection callbacks. */ -abstract class BinderRecyclerFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener { - private lateinit var swipeRefreshLayout: SwipeRefreshLayout - lateinit var recyclerView: RecyclerView +abstract class BinderRecyclerFragment( + @LayoutRes private val layoutResId: Int = R.layout.fragment_recycler_layout +) : Fragment(), SwipeRefreshLayout.OnRefreshListener { + + protected val swipeRefreshLayout: SwipeRefreshLayout + get() = requireView().findViewById(R.id.swipeContainer) + + protected val recyclerView: RecyclerView + get() = requireView().findViewById(R.id.list) abstract fun getLayoutManager(): RecyclerView.LayoutManager abstract fun getAdapter(): RecyclerView.Adapter<*> - @LayoutRes - protected open fun getLayoutResId(): Int = R.layout.fragment_recycler_layout - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(getLayoutResId(), container, false) - } + ): View? = inflater.inflate(layoutResId, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - swipeRefreshLayout = view.findViewById(R.id.swipeContainer) - recyclerView = view.findViewById(R.id.list) - swipeRefreshLayout.setOnRefreshListener(this) + recyclerView.apply { + setHasFixedSize(true) + layoutManager = getLayoutManager() + adapter = getAdapter() + configureRecyclerView(this) + } + + swipeRefreshLayout.apply { + setOnRefreshListener(this@BinderRecyclerFragment) + configureSwipeRefresh(this) + } + } + + protected open fun configureRecyclerView(recyclerView: RecyclerView) { + // Optional for subclasses + } + + protected open fun configureSwipeRefresh(swipeRefreshLayout: SwipeRefreshLayout) { + // Optional for subclasses } } \ No newline at end of file