diff --git a/koin/src/main/java/in/koreatech/koin/ui/main/activity/MainActivity.kt b/koin/src/main/java/in/koreatech/koin/ui/main/activity/MainActivity.kt index d7b073b35..4929b3811 100644 --- a/koin/src/main/java/in/koreatech/koin/ui/main/activity/MainActivity.kt +++ b/koin/src/main/java/in/koreatech/koin/ui/main/activity/MainActivity.kt @@ -29,10 +29,13 @@ import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 +import com.google.android.material.tabs.TabLayoutMediator import dagger.hilt.android.AndroidEntryPoint +import `in`.koreatech.koin.domain.model.dining.DiningPlace import `in`.koreatech.koin.domain.util.DiningUtil import `in`.koreatech.koin.domain.util.ext.arrange import `in`.koreatech.koin.domain.util.ext.typeFilter +import `in`.koreatech.koin.ui.main.adapter.DiningContainerViewPager2Adapter import `in`.koreatech.koin.ui.store.contract.StoreActivityContract @AndroidEntryPoint @@ -51,6 +54,7 @@ class MainActivity : KoinNavigationDrawerActivity() { mainActivityViewModel.setSelectedPosition(it) } } + private val diningContainerAdapter by lazy { DiningContainerViewPager2Adapter(this) } private val storeCategoryRecyclerAdapter = StoreCategoryRecyclerAdapter().apply { setRecyclerViewClickListener(object : RecyclerViewClickListener { @@ -118,9 +122,11 @@ class MainActivity : KoinNavigationDrawerActivity() { // callDrawerItem(R.id.navi_item_dining) // } - DiningUtil.diningPlace.forEach { place -> - tabDining.addTab(tabDining.newTab().setText(place)) - } + pagerDiningContainer.adapter = diningContainerAdapter + + TabLayoutMediator(tabDining, pagerDiningContainer) { tab, position -> + tab.text = DiningPlace.entries[position].place + }.attach() } private fun initViewModel() = with(mainActivityViewModel) { diff --git a/koin/src/main/java/in/koreatech/koin/ui/main/adapter/DiningContainerViewPager2Adapter.kt b/koin/src/main/java/in/koreatech/koin/ui/main/adapter/DiningContainerViewPager2Adapter.kt new file mode 100644 index 000000000..373b916fa --- /dev/null +++ b/koin/src/main/java/in/koreatech/koin/ui/main/adapter/DiningContainerViewPager2Adapter.kt @@ -0,0 +1,26 @@ +package `in`.koreatech.koin.ui.main.adapter + +import android.util.SparseArray +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter +import `in`.koreatech.koin.domain.model.dining.DiningPlace +import `in`.koreatech.koin.ui.main.fragment.DiningContainerFragment + +class DiningContainerViewPager2Adapter( + fragmentActivity: FragmentActivity +) : FragmentStateAdapter(fragmentActivity) { + private val fragments = SparseArray<Fragment>() + + override fun getItemCount(): Int = 4 + + override fun createFragment(position: Int): Fragment { + return fragments[position] ?: when (position) { + 0 -> DiningContainerFragment.newInstance(DiningPlace.CornerA.place) + 1 -> DiningContainerFragment.newInstance(DiningPlace.CornerB.place) + 2 -> DiningContainerFragment.newInstance(DiningPlace.CornerC.place) + 3 -> DiningContainerFragment.newInstance(DiningPlace.Nungsu.place) + else -> throw IllegalArgumentException("Position must be lower than $itemCount") + }.also { fragments[position] = it } + } +} \ No newline at end of file diff --git a/koin/src/main/java/in/koreatech/koin/ui/main/fragment/DiningContainerFragment.kt b/koin/src/main/java/in/koreatech/koin/ui/main/fragment/DiningContainerFragment.kt new file mode 100644 index 000000000..9fd6a4387 --- /dev/null +++ b/koin/src/main/java/in/koreatech/koin/ui/main/fragment/DiningContainerFragment.kt @@ -0,0 +1,38 @@ +package `in`.koreatech.koin.ui.main.fragment + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import `in`.koreatech.koin.R +import `in`.koreatech.koin.core.util.dataBinding +import `in`.koreatech.koin.databinding.FragmentDiningContainerBinding +import `in`.koreatech.koin.ui.main.viewmodel.MainActivityViewModel + +class DiningContainerFragment : Fragment(R.layout.fragment_dining_container) { + private val binding by dataBinding<FragmentDiningContainerBinding>() + private val viewModel by viewModels<MainActivityViewModel>() + private val place by lazy { arguments?.getString(PLACE) } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + initView() + } + + private fun initView() { + place.apply { + binding.textViewDiningContainer.text = this.toString() + } + } + + companion object { + private const val PLACE = "place" + fun newInstance(place: String) = + DiningContainerFragment().apply { + arguments = Bundle().apply { + putString(PLACE, place) + } + } + } +} \ No newline at end of file diff --git a/koin/src/main/res/layout/activity_main.xml b/koin/src/main/res/layout/activity_main.xml index bda749328..3cc8ff529 100644 --- a/koin/src/main/res/layout/activity_main.xml +++ b/koin/src/main/res/layout/activity_main.xml @@ -164,6 +164,11 @@ android:layout_height="1dp" android:background="#E1E1E1" /> + <androidx.viewpager2.widget.ViewPager2 + android:id="@+id/pager_dining_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </LinearLayout> </androidx.core.widget.NestedScrollView> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> diff --git a/koin/src/main/res/layout/fragment_dining_container.xml b/koin/src/main/res/layout/fragment_dining_container.xml new file mode 100644 index 000000000..33510c22f --- /dev/null +++ b/koin/src/main/res/layout/fragment_dining_container.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <data> + + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.main.fragment.DiningContainerFragment"> + + <TextView + android:id="@+id/text_view_dining_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="어디야??" /> + + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file